使用CTRL + Z结束STDIN输入时,代码不打印数组的最后一个元素

时间:2011-07-21 22:45:59

标签: perl

我似乎遇到了一个特殊的问题。这是代码

#read a list of strings and print in 20-character column

print "Enter your strings:\n";
chomp(@list = <STDIN>);

foreach $_ (@list){
    printf "\n%20s", $_;
}

如果我在Windows上调用文件结尾CTRL + Z之前没有按Enter键,则代码不会打印数组的最后一个元素。

编辑:这是一个示例输出

Enter your strings:
a
v
b
                   a
                   v

这里我输入b后按下Ctrl-Z,然后按回车键,它没有打印b。如果我按了Enter键然后按Ctrl-Z,它就会打印b。

1 个答案:

答案 0 :(得分:1)

STDOUT在去往终端时进行线路缓冲;在添加换行符之前,数据实际上不会显示。尝试:

print "Enter your strings:\n";
chomp(@list = <STDIN>);
print "\n";
foreach $_ (@list){
    printf "%20s\n", $_;
}

或在循环之前添加$| = 1;