2014-03-13 116 views
1

我在調試完成了另一個腳本。簡化perl腳本

這是他做的片段:

... 
open OUTPUT_FILE, "$makingOutDir/$inputFile"; 
$_ = <OUTPUT_FILE>; 
while (defined($_)) { 
    $diff_text .= prep_for_output($_); 
    $_ = <OUTPUT_FILE>; 
} 
close OUTPUT_FILE; 

print <<EOF 
Test $num_test skipped: missing output file for matching 
$diff_text 
EOF 
... 

我在想,如果是能夠獲得相同的行爲簡化它這樣做是這樣的:

... 
print "Test $num_test skipped: missing output file for matching"; 
open OUTPUT_FILE, catfile($makingOutDir, $inputFile) or die $!; 
while (<OUTPUT_FILE>) { 
    my $diff = prep_for_output($_); 

    print <<EOF 
$diff 
EOF 
} 
close OUTPUT_FILE; 
... 

,或者在你的意見,有是更好更簡單的方法嗎?

+0

帶'while'的第一個代碼顯然屬於OMFG類別。 –

+0

@mpapec所以,第一個代碼是*糟糕*。其次是*通過*。你建議採取第三種方式,還是以第二種方式做的最好? –

+1

第三個不會累積到'$ diff_text'的輸出中,而是立即輸出。如果這寫了你的一些同事告訴他,這樣的能力水平是預計從事perl不到一週的人。 –

回答

0

這不是一個巨大的改進,但也許是這樣的。

print "Test $num_test skipped: missing output file for matching"; 

my $filename = catfile($makingOutDir, $inputFile); 
open my $out_fh, '<', $filename or die "Can't open $filename: $!"; 

print prep_for_output($_) while <$out_fh>; 

close $out_fh;