On Wed, Dec 1, 2010 at 4:58 PM, Mariano Loza Coll <malozac...@gmail.com>wrote:
Alternatively, a good samaritan out there can gelp you with a one or
two-liner code.

If you only want to count letters, here's the 1-2 liner code, I guess:

> #! /usr/bin/perl
> use strict;
> use warnings;
> use 5.010;
>
> my %letter_count;
> my %regex_count;
> my $total;
>
> while (<DATA>) {
>     chomp;
>     /(.)(??{ $regex_count{$1}++; $total++ })/g; #Using a regex
>
>     for my $letter (split //) {       #Using a for loop
>         next if $letter =~ /\s/;
>         $letter_count{$letter}++;
>     }
> }
>
> printf "%s\t=>\t%f\n", $_, ($regex_count{$_} / $total) * 100 for sort keys
> %regex_count;
>
>
> __DATA__
> MGSSKSKPKDPSQRRRSLEPPDSTHHGGFPASQTPNKTAAPDTHRTPSRSFGTVATEPKLFGGFNTSDTV
> TSPQRAGALAGGVTTFVALYDYESWIETDLSFKKGERLQIVNNTEGNWWLAHSLTTGQTGYIPSNYVAPS
> DSIQAEEWYFGKITRRESERLLLNPENPRGTFLVRESETTKGAYCLSVSDFDNAKGLNVKHYKIRKLDSG
> GFYITSRTQFSSLQQLVAYYSKHADGLCHRLTNVCPTSKPQTQGLAKDAWEIPRESLRLEVKLGQGCFGE
> VWMGTWNGTTRVAIKTLKPGTMSPEAFLQEAQVMKKLRHEKLVQLYAVVSEEPIYIVIEYMSKGSLLDFL
> KGEMGKYLRLPQLVDMAAQIASGMAYVERMNYVHRDLRAANILVGENLVCKVADFGLARLIEDNEYTARQ
> GAKFPIKWTAPEAALYGRFTIKSDVWSFGILLTELTTKGRVPYPGMGNGEVLDRVERGYRMPCPPECPES
> LHDLMCQCWRRDPEERPTFEYLQAQLLPACVLEVAE
>

The regex solution uses the (??{CODE}) extended regular expression,
explained in perlre[0]. The for solution uses split with an empty pattern,
which splits on the empty string[1].

[0] http://perldoc.perl.org/perlre.html#Extended-Patterns
[1] http://perldoc.perl.org/functions/split.html

Reply via email to