2014-03-27 58 views
0

我有一個示例代碼是這樣的:我怎樣才能讓系統命令返回變量?

#!usr/bin/perl -w 
my $path = shift; 
my $max_number_of_files = shift; 
print("Changing directory to path $path $!" . "\n"); 
chdir($path) or die "Cant chdir to $path $!"; 
print("Counting files..." . "\n"); 
counting(); 
sub counting { 
$counted = system("ls -1 | wc -l"); 
if ($counted > $max_number_of_files) { 
print("You have more or equal files"); 
return 1; 
} 
else { 
    print("$counted"); 
    print "You have less files"; 
    return 2; 
} 
} 

但我的價值$計算,我認爲沒有得到安慰哪個系統命令show值。我檢查了它,它總是零。我該如何處理?

回答

0

system的返回值是由system調用的進程的退出代碼,而不是進程的輸出。

要獲得過程的輸出,使用方法:

chomp($counted = `ls -1 | wc -l`); 
+0

無法修改Counter.pl第9行標量賦值中的標量chomp,「ls -1 | wc -l」;「 它給出了這樣的錯誤。 chomp做什麼? – Hayra

+0

@Hayra Oops,括號中的位置不正確,現在修復。僅供參考,'chomp'在字符串末尾刪除了新的行符號。 –

+0

這解決了我正在工作的問題。謝謝! – Hayra

2

它通常被認爲是不好的做法來解析的ls的輸出,因爲文件名可以包含換行符,這使得它們跨越多個行,並wc將盡數不止一次。

你可以試試這個:

#!/usr/bin/perl 
use strict; 
use warnings; 

my @files=<*>; 
print scalar(@files)," files\n"; 

此外,在便攜性方面,你會做的更好使用Perl的內置功能,因爲lswc可能無法使用一些(例如,Windows)的機器。