windows - Win32 终端 : unexpected printing behavior

标签 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

最佳答案

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

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

相关文章:

windows - 将代码移入内核空间会提供更精确的计时吗?

printing - Gnuplot 没有画线

c - 修改函数以返回指向字符串中单词最后一个字母的指针

regex - 使用 perl 或 sed 获取子字符串

perl - 折叠具有多个字段的行

perl - 在 perl : Label not found 中的嵌套 while 循环中跳出最内层循环

delphi - 如何使用TPrinter的本地实例

android - CMD:我的 Android 设备使用哪个盘符?

windows - 在 Windows 7 上编译 Fortran .dll(免费)?

windows - 从常规命令提示符访问 Visual Studio 开发人员命令提示符