2012-03-22 85 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