2012-03-22 88 views
6

我很困惑。我刚拿到一台新的开发机器,perl似乎没有输出任何内容,用于print命令。打印:生产没有输出

#!/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再见(空)文件。

即使这会产生什么:

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

更多资讯帮助。试试:'perl -V'和'which perl' 另外,在脚本中添加'使用警告;'和'use strict;' – Freddo411 2012-03-22 21:16:38

+0

添加您请求的信息。 – JoshJordan 2012-03-22 21:23:00

+0

“perl v5.5.5”是什么? [这个版本号从来没有任何官方发布](http://search.cpan.org/perldoc?perlhist),即使有,它也是古老的。升级你的'perl'安装。 – mob 2012-03-22 21:29:22

回答

0

问题不STDOUT丢失或起壳重定向,而是外壳设置写时提示,从而覆盖发送到同一行的所有输出发送一个回车不换行。

具体来说,我的老版本zsh已经设置了promptcr。有关更多信息,请参阅question 3.23 here

+0

(我已经提到过了。) – ikegami 2012-03-23 16:40:47

8

我相信存在的Perl以外的问题。无论是

  • 在当你运行该脚本一些异常状态的终端,
  • perl的父进程重定向perl的输出远离终端,或
  • perl的父进程没有提供STDOUT和STDERR为perl

您可能可以通过实际检查print是否返回错误来收集更多信息。 (它总是令我感到困惑,为什么人们不检查错误,当事情不工作,他们的方式,他们希望它的工作。)

perl -we'print("a") or die("Can'\''t print: $!\n");' 

您可能能够通过使用strace或任何收集更多的信息,这就是所谓的在你的系统上。 (寻找write(1write(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

@JoshJordan ,也可以用'\ perl'而不是'perl'。也许你有一个别名? – ikegami 2012-03-22 21:59:37

+1

@JoshJordan,另外,你可以使用''a \ n“'而不是''a”'。输出(例如你的提示) – ikegami 2012-03-22 22:02:26

+0

Upvoted帮助我找到strace的问题。谢谢! – JoshJordan 2012-03-23 15:08:01