在 Windows 终端中打印此脚本时,额外的空行从何而来?
use strict;
use warnings;
use 5.10.0;
use Term::Size::Any qw(chars);
my $w = ( chars( \*STDOUT ) )[0];
my $string = "Y" x $w;
say $string;
say $string;
say $string;
say $w;
MSWindows 控制台的输出:
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
80
Linux 控制台的输出:
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
80
最佳答案
如果您写入屏幕上的最后一列,不同的终端和终端仿真器/控制台的工作方式会有所不同。
- 在 Windows 上,光标会移动到下一行的第一列,从而产生打印额外 LF 的错觉。
- 在 Linux 上,光标有效地位于屏幕右侧的假想列。因此,当您发送 LF 时,它会将您带到下一行。
这个程序在写长行和 LF 之间休眠
use strict;
use warnings;
use 5.10.0;
my $w = shift // 80 ;
my $string = "Y" x $w;
$|++; # flush buffer on every write
print $string ;
print "\n" ;
print $string ;
sleep 2 ;
print "\n" ;
print "Finished\n" ;
在 Windows 上,您在 sleep 时会看到以下内容。
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
[bottom of screen]
在 Linux 上
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
[bottom of screen]
可能不止于此,但希望这能满足您的好奇心!
关于windows - Win32 终端 : unexpected printing behavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21351634/