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
+);
}