2013-05-14 62 views
1

我知道我可以使用require並以不同的方式來完成此操作,但我只是在perl周圍忙碌着,遇到了一些我不知道如何解釋的東西。通過系統調用從其他perl腳本獲取結果

這是我的第一個劇本:

use 5.16.2; 
use warnings; 

sub get 
{ 
print "hello"; 
} 

get(); 

測試腳本:

use 5.16.2; 
use warnings; 

my $val=system('perl test.pl'); 
print "$val\n"; 

#prints: hello0, I surmised that 0 is the return code for system 

我擡頭怎麼不理0和得到的東西,這是錯的,但使我這個:

print '', system('perl test.pl'); 

#also prints hello0 

my $val='', system('perl test.pl'); 
print "$val\n"; 
#prints: hello 

這可行,但我完全不知道爲什麼。我也很困惑,爲什麼之前的那個不工作。有人能解釋一下嗎?

回答

3

此:

print '', system('perl test.pl'); 

電話print有兩個參數,即''(空字符串:無效果)和system('perl test.pl')(計算結果爲0,正如你所看到的,前提是perl test.pl運行成功)。

使用更多的括號更加明確的,你可以寫在上面:

print('', system('perl test.pl')); 

或者你也可以寫爲:

my $val = system 'perl test.pl'; # prints 'hello', sets $val to zero 
print '', $val; # prints zero 

此:

my $val='', system('perl test.pl'); 

聲明$val作爲局部變量並將其設置爲''(空字符串),以及(無關)呼叫system('perl test.pl')。明確性使用括號:

(my $val = ''), system('perl test.pl'); 

或者:

my $val = ''; 
system('perl test.pl'); # prints 'hello', discards exit-status 
+0

謝謝。這很有道理。 – 2013-05-14 05:30:48

+0

@SteveP .:不客氣! – ruakh 2013-05-14 06:13:22