Pretty cool but when used on a file it breaks hyphenated words into their
components and counts them separately:

17 occurrences of 'Acct'
3 occurrences of 'Authentic'
etc

instead of:

3 occurrences of Acct-Authentic
3 occurrences of Acct-Delay-Time
1 occurrences of Acct-Input-Octets
1 occurrences of Acct-Input-Packets
1 occurrences of Acct-Output-Octets
1 occurrences of Acct-Output-Packets
3 occurrences of Acct-Session-Id
1 occurrences of Acct-Session-Time
3 occurrences of Acct-Status-Type

----- Original Message -----
From: "Michael Lamertz" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Cc: "Chris Brown" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
Sent: Tuesday, April 24, 2001 1:03 PM
Subject: Re: [BPQ] help!! any idea whats wrong with this??


> Paul ([EMAIL PROTECTED]) wrote:
> >
> >  #!/usr/local/bin/perl -w
> >
> >  use strict
> >  open (FILE,$0) or die $!; # this reads itself
> >  my($data,%count);
> >  { local $/ = undef;       # erases the record seperator for this block
> >    $data = <FILE>;         # slurps in the whole file to $data
> >  }
> >  close(FILE);              # good habit
> >  map { $count{$_}++ } $data =~ /(\w+)/sog; # watch the context!
> >  print map { "$count{$_} occurances of '$_'\n" } sort keys %count;
> >
> > Perl is a wonderfully concise language.
> > The above is strictly given as an example of a few performance tricks
> > that are worth researching. =o)
>
> I agree printing the map output, but I disagree using map to calculate
> the sums.  map always generates a new array that immediately gets dumped
> since it's not assigned.  A foreach would be nicer to system resources
> and better to read.  To make it short, use it postfix:
>
>     $count{$_}++ foreach ($data=~ /.../);
>
> Check 'perldoc perlfaq6' for reference.
>
> --
>                      If we fail, we will lose the war.
>
> Michael Lamertz          | [EMAIL PROTECTED] / [EMAIL PROTECTED]
>     Nordstr. 49          | http://www.lamertz.net
>     50733 Cologne        | Work: +49 221 3091-121
>     Germany              | Priv: +49 221 445420 / +49 171 6900 310
>

Reply via email to