我很困惑。我刚买了一台新的开发机器,而perl似乎没有为打印命令输出任何内容。
#!/usr/bin/perl
use warnings;
use strict;
print "A";
print STDOUT "B";
print STDERR "C";
open FH, ">", "testprint';
print FH "D";
close FH;
在控制台中不生成任何内容, testprint 成为1-bye(空)文件。
即使这样也不会产生任何结果:
perl -e "print 'a';"
对于碰巧在我的机器上的两个perl二进制文件都会发生这种情况。我很困惑在哪里开始调试这个问题。有什么想法吗?
修改
perl -v
This is perl, v5.8.8 built for x86_64-linx-thread-multi
和
which perl
/usr/bin/perl
答案 0 :(得分:9)
我认为问题存在于Perl之外。任
perl
的父流程将perl
的输出重定向到终端,或perl
的父进程未为perl
提供STDOUT和STDERR。您可以通过实际检查print
是否返回错误来收集更多信息。 (它总是让我感到困惑,为什么当某些东西无法正常运行时,人们不会检查错误。)
perl -we'print("a") or die("Can'\''t print: $!\n");'
您可以使用strace
或系统上调用的任何内容来收集更多信息。 (查找write(1
和write(2
。)
strace perl -we'print("a") or die("Can'\''t print: $!\n");'
但如果问题不在Perl中,那些应该什么都不打印,这就是为什么尝试将输出重定向到文件然后检查文件及其大小可能是明智的。
perl -we'print("a") or die("Can'\''t print: $!\n");' 1>out 2>err
答案 1 :(得分:1)
问题不是STDOUT
从shell中丢失或重定向,而是将shell设置为在写入提示时发送没有换行符的回车符,从而覆盖发送到同一行的所有输出。 / p>
具体来说,我的旧版zsh
设置了promptcr
。有关详细信息,请参阅question 3.23 here。