You need to know the size of the terminal or window. For instance, you want to format text so that it doesn't pass the right-hand boundary of the screen.
Either use the ioctl
described in Recipe 12.14, or else use the CPAN module Term::ReadKey:
use Term::ReadKey; ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
GetTerminalSize
returns four elements: the width and height in characters and the width and height in pixels. If the operation is unsupported for the output device (for instance, if output has been redirected to a file), it returns an empty list.
Here's how you'd graph the contents of @values
, assuming no value is less than 0:
use Term::ReadKey; ($width) = GetTerminalSize(); die "You must have at least 10 characters" unless $width >= 10; $max = 0; foreach (@values) { $max = $_ if $max < $_; } $ratio = ($width-10)/$max; # chars per unit foreach (@values) { printf("%8.1f %s\n", $_, "*" x ($ratio*$_)); }
The documentation for the Term::ReadKey module from CPAN; Recipe 12.14