【问题标题】:Win32 terminal: unexpected printing behaviorWin32 终端:意外的打印行为
【发布时间】:2014-02-16 13:35:41
【问题描述】:

在 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 perl printing terminal console


    【解决方案1】:

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

    • 在 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]
    

    可能不止于此,但希望这能满足您的好奇心!

    【讨论】:

      【解决方案2】:

      用“打印”代替“说”。我认为 Linux 和 Windows 上的输出是相同的。

      【讨论】:

      • 我对为什么脚本在 Windows 上的行为不同感兴趣。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-11-17
        • 1970-01-01
        • 1970-01-01
        • 2013-06-27
        • 2013-09-14
        • 1970-01-01
        • 1970-01-01
        • 2020-02-24
        • 2023-03-19
        相关资源
        最近更新 更多