如何在Perl中检索终端宽度?

时间:2009-11-23 09:46:11

标签: perl terminal

我想输出一个进度条,但如何在Perl中检索终端宽度?

核心Perl解决方案将是首选,因为我无法访问编译器,只有已安装的5.8.2 Perl。

4 个答案:

答案 0 :(得分:26)

Perl附带的常见问题解答可以解答这个问题。如果您运行perldoc -q "screen size",您将获得以下内容:

  

如何获取屏幕尺寸?

     

如果您从CPAN安装了Term::ReadKey模块,则可以使用它来获取字符和像素的宽度和高度:

use Term::ReadKey;
($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
     

这比原始的“ioctl”更便携,但不是说明性的:

require 'sys/ioctl.ph';
die "no TIOCGWINSZ" unless defined &TIOCGWINSZ;
open(TTY, "+</dev/tty") or die "No tty: $!";
unless (ioctl(TTY, &TIOCGWINSZ, $winsize='')) {
    die sprintf "$0: ioctl TIOCGWINSZ (%08x: $!)\n", &TIOCGWINSZ;
}
($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize);
print "(row,col) = ($row,$col)";
print "  (xpixel,ypixel) = ($xpixel,$ypixel)" if $xpixel || $ypixel;
print "\n";

因此,如果您需要纯粹的Perl解决方案,可以使用最后一个解决方案,或者如果您希望在代码中使用更简单的解决方案但需要更多的前期设置,则可以从CPAN安装Term::ReadKey

答案 1 :(得分:6)

如果您想制作进度条,请不要赘述。使用众多progress bar modules on CPAN中的一个并完成它。

答案 2 :(得分:6)

这显然取决于平台,但在Linux上开箱即用的非常简单的解决方案就是:

my $width = `tput cols`;

答案 3 :(得分:5)

Term::Size::Any看起来就是你想要的。