diff --git a/charhist/GNUmakefile b/charhist/GNUmakefile index 574c244..f5db7a3 100644 --- a/charhist/GNUmakefile +++ b/charhist/GNUmakefile @@ -3,6 +3,9 @@ include GNUmakerules all: charhist +charhist: charhist.pl + cp $^ $@ + chartab: clean: rm -f charhist core foo bar baz diff --git a/charhist/charhist.pl b/charhist/charhist.pl new file mode 100644 index 0000000..8460480 --- /dev/null +++ b/charhist/charhist.pl @@ -0,0 +1,40 @@ +#!/usr/bin/perl +use warnings; +use strict; +use Getopt::Long; +use Pod::Usage; +use autodie; + +my $encoding; + +GetOptions('encoding=s', \$encoding) or pod2usage(); + +my %hist; +if (@ARGV) { + readfile($_) for @ARGV; +} else { + readfile(); +} + +binmode STDOUT, ":encoding(UTF-8)"; +for (sort keys %hist) { + my $cp = ord; + printf("%x %d %o %s\t%d\n", $cp, $cp, $cp, /\p{Graph}/ ? $_ : ".", $hist{$_}); +} + +sub readfile { + my ($filename) = @_; + my $fh; + if (defined $filename) { + open $fh, "<", $filename; + } else { + $fh = \*STDIN; + + } + binmode $fh, ":encoding($encoding)"; + while (<$fh>) { + for my $c (split(//)) { + $hist{$c}++; + } + } +}