Term::Size::Win32 - Retrieve terminal size (on Windows)


    use Term::Size;

    ($columns, $rows) = Term::Size::chars *STDOUT{IO};
    ($x, $y) = Term::Size::pixels;


Term::Size is a Perl module which provides a straightforward way to retrieve the terminal size.

Both functions take an optional filehandle argument, which defaults to *STDIN{IO}. They both return a list of two values, which are the current width and height, respectively, of the terminal associated with the specified filehandle.

Term::Size::chars returns the size in units of characters, whereas Term::Size::pixels uses units of pixels.

In a scalar context, both functions return the first element of the list, that is, the terminal width.

The functions may be imported.

If you need to pass a filehandle to either of the Term::Size functions, beware that the *STDOUT{IO} syntax is only supported in Perl 5.004 and later. If you have an earlier version of Perl, or are interested in backwards compatibility, use *STDOUT instead.

  To be true, you don't need a Win32 machine to run this module. 
  You need a working B<Win32::Console>. Of course, it is
  easier if you are in Win32.


1. Refuse to run in a too narrow window.

    use Term::Size;

    die "Need 80 column screen" if Term::Size::chars *STDOUT{IO} < 80;

2. Track window size changes. (Well, this is not for you, Windows users.)

    use Term::Size 'chars';

    my $changed = 1;

    while (1) {
            local $SIG{'WINCH'} = sub { $changed = 1 };

            if ($changed) {
                    ($cols, $rows) = chars;
                    # Redraw, or whatever.
                    $changed = 0;


Both functions return undef if there is an error.

If the terminal size information is not available, the functions will normally return (0, 0), but this depends on your system. On character only terminals, pixels will normally return (0, 0). To be true, in Win32, it always return (0, 0).


This version only works on Win32 systems.

I lied about the function argument: it is ignored by now, always using STD_INPUT_HANDLE. Need to work this out: mapping tty devices to appropriate Windows handles. (See Win32::Console docs.)


Unify this with via some unifying module like Term-Size-Any.


Tim Goodwin, <>, 1997-04-23. (The author of the original Unix-only version of this module.)

Adriano Ferreira, <>, 2006-05-19.


Copyright (C) 2006-2008 by Adriano R. Ferreira

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.