Win32终端:意外的打印行为

时间:2014-01-25 14:15:02

标签: windows perl printing terminal console

在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

3 个答案:

答案 0 :(得分:2)

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

  • 在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上,您在睡觉时会看到以下内容。

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

[bottom of screen]

在Linux上

YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
[bottom of screen]

可能还有更多,但希望这会满足你的好奇心!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

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

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