chr_freq.pl 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 30 March 2012
  5. # https://github.com/trizen
  6. # Count Character Frequency in a file
  7. use 5.010;
  8. use strict;
  9. use warnings;
  10. use open IO => ':utf8', ':std';
  11. my %table;
  12. my %memoize;
  13. my %white_spaces = (
  14. ord("\r") => q{\r},
  15. ord("\n") => q{\n},
  16. ord("\f") => q{\f},
  17. ord("\t") => q{\t},
  18. ord(" ") => q{' '},
  19. );
  20. my $file = shift // $0;
  21. open my $fh, '<', $file or die "Unable to open $file: $!";
  22. while (defined(my $char = getc $fh)) {
  23. ++$table{
  24. $memoize{$char} // do {
  25. $memoize{$char} = ord $char;
  26. }
  27. };
  28. }
  29. close $fh;
  30. $= = 80;
  31. format STDOUT_TOP =
  32. CHR ORD USED
  33. -----------------------------------
  34. .
  35. my $key;
  36. format STDOUT =
  37. @>> @>>>>>> @>>>>>>
  38. $white_spaces{$key} // chr $key, $key, $table{$key}
  39. .
  40. foreach $key (sort { $table{$b} <=> $table{$a} } keys %table) {
  41. write;
  42. }
  43. say "\nUnique characters used: ", scalar keys %table;