Determining Terminal or Window Size
Problem
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.
Solution
Either use the ioctl
described in Section 12.14, or else use the CPAN module Term::ReadKey:
use Term::ReadKey; ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
Discussion
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*$_)); }
See Also
The documentation for the Term::ReadKey module from CPAN; Section 12.14
Get Perl Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.