#!/usr/bin/env perl use utf8; ############################################################################### # This program reads characters from STDIN and then computes a frequency table. # # Copyright © 2020 Richard Lesh. All rights reserved. ############################################################################### use Utils; use strict; use warnings; MAIN: { binmode(STDOUT, ":utf8"); binmode(STDERR, ":utf8"); binmode(STDIN, ":utf8"); my $total_count = 0; my $count_table = {}; my $c; while (defined($c = Utils::getchar(*STDIN))) { if (!exists $count_table->{$c}) { $count_table->{$c} = 1; } else { ++$count_table->{$c}; } ++$total_count; } print "Hex\tChar\tCount\tFreq\n"; my $sorted_keys = [sort { $a <=> $b } keys(%{$count_table})]; foreach my $x (@$sorted_keys) { my $FREQ = $count_table->{$x} / $total_count; if (chr($x) =~ m/^\p{Control}/) { print Utils::messageFormat("\{0:05x\}\t0x\{0:x\}\t\{1:d\}\t\{2:.4f\}", $x, $count_table->{$x}, $FREQ), "\n"; } else { print Utils::messageFormat("\{0:05x\}\t\{1:c\}\t\{2:d\}\t\{3:.4f\}", $x, chr($x), $count_table->{$x}, $FREQ), "\n"; } } }