Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: A another tr/// statement question..

by bwana147 (Pilgrim)
on Jul 19, 2001 at 16:55 UTC ( [id://98055]=note: print w/replies, xml ) Need Help??


in reply to A another tr/// statement question..
in thread tr/// statement

I'd rather not open and close the file more than once: disk accesses take time (there's the cache, you didn't mention your file's size). Instead, I would first generate subs that count a given character and store them in a hash, referenced by that character.

Then, for each line in the file, loop over the letters and call the sub from the hash. Increment a counter which is itself stored in a hash.

#!/usr/local/bin/perl use strict; my @letter = qw/ a b c x y z /; my %subs; my %counts; foreach ( @letter ) { $subs{$_} = eval "sub { \$_[0] =~ tr/$_// }"; } while ( <DATA> ) { foreach my $letter ( @letter ) { $counts{$letter} += $subs{$letter}->($_); } } print "$_: $counts{$_}\n" foreach @letter; __DATA__ aedj dfas jijiojsdf dsfwfy jiox jiohjdfax jojojdjj, oiiia oioje asfdc +oujsdfayx soujfosdxjpoiojfdxjljojaois jojojx jopjpx jojoijx joijiodfx asdfasdf jjalsdf jlajkldf jojiojsd jiojasj ioj wwdn jojae jojocjoc joi +jss jiojwx jiojoxuiojy joiyu oiuouyy

--bwana147

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://98055]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (3)
As of 2024-04-19 05:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found