2014-01-25 65 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上的行爲不同。

因爲您使用的兩個終端是不同的程序。