in reply to No-Frills Curve Sketches

Here is my graph program. Reads from STDIN and splits on whitespace. The first field is the label and the second field gets plotted. You did say no frills right?

YuckFrill

Example:

perl -e 'print "$_ " . sin($_ / 10) . "\n" for (1..64)' | graph.pl
#!/usr/bin/perl use strict; my ($WIDE) = @ARGV; $WIDE ||= 80; my (@list, $min, $max); my ($maxval, $maxkey); while (my $line = <STDIN>) { chomp $line; my ($key, $val) = split(' ', $line); if (defined($key) && defined($val)) { push (@list, { key => $key, val => $val}); if (!defined($min) || $val < $min) { $min = $val; } if (!defined($max) || $val > $max) { $max = $val; } if (!defined($maxkey) || length($key) > $maxkey) { $maxkey = length($key); } if (!defined($maxval) || length($val) > $maxval) { $maxval = length($val); } } } my $factor = ($max - $min) / ($WIDE - $maxkey - $maxval - 2); for my $i (@list) { printf STDOUT "%-*.*s %s $i->{val}\n", $maxkey, $maxkey, $i->{key}, '*' x (($i->{val} - $min) / $factor +); }