2013-07-16 117 views
2

據我所知,我們可以使用$?來獲得我們執行的命令的結果,並且它將返回一個非零的錯誤結果和一個0的結果,前提是程序員保持了慣例。
但是當我們運行perl腳本時呢?
我是新的perl,但我認爲perl腳本返回1如果他們是一個模塊的一部分,否則他們不會返回任何東西。
那麼我怎麼知道我運行的perl腳本發生了什麼?從bash腳本運行的Perl腳本的狀態

+1

試試看看。 – mob

回答

7

從shell運行Perl腳本的行爲是相同的。 有test.pl

#!/usr/bin/env perl 
exit(0); # or just exit 

運行:

./test.pl && echo "OK" || echo $? 
OK 

#!/usr/bin/env perl 
exit(123); 

運行:

./test.pl && echo "OK" || echo $? 
123 

#!/usr/bin/env perl 
die; 

運行:

./test.pl && echo "OK" || echo $? 
Died at ./test.pl line 2. 
255 

所以:

  • 從Perl腳本退出0(或沒有)將在外殼true
  • 如果退出perl腳本,但其字節值不是0,將在shell中爲false$?將爲您提供退出值。
  • 退出perl腳本與die將在shell中false$?將255(在我的情況 - 我檢查了它)。
+1

值得注意的是用'die'終止Perl程序會導致錯誤代碼爲'-1'。不需要明確的「退出」。 – amon

+2

爲了清晰起見,* 0 *以外的值仍然必須適合一個字節。 (以防萬一它仍然不清楚,perl中的'die();'將導致退出狀態爲255.) – kojiro

+0

你們都是對的。我會將其添加到答案中。謝謝 - 然而,bash(在我的情況)給了我255而不是-1。 –