2014-01-25 67 views
2

在Windows终端中打印此脚本时,附加的空行从哪里来?Win32终端:意外的打印行为

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; 

从MS Windows中的控制台输出:

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 

80 

从Linux控制台输出:

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 
80 

回答

2

如果您写入屏幕上的最后一列,不同的终端和终端仿真器/控制台的工作方式会有所不同。

  • 在窗口上,光标移到下一行的第一列,从而创建一个额外的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" ; 
    

    在你看到睡觉时下面的窗口之间

这个节目睡。

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 

[bottom of screen] 

虽然在Linux上

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 
[bottom of screen] 

有可能是比这更给它,但希望这将满足你的好奇心!

0

而不是 '说' 使用 '打印'。我认为在Linux和Windows上输出都是一样的。

+0

我感兴趣的是为什么脚本在Windows上的行为不同。 –

0

我感兴趣的是为什么脚本在Windows上的行为不同。

因为您使用的两个终端是不同的程序。