2013-04-17 39 views
3

有沒有簡單的方法來模擬腳本中-l命令行開關的效果? (當然,我可以隨時chomp每一行,然後追加「\ n」來每行我打印的,但關鍵是要避免這樣做。)如何模仿-l內部腳本

回答

5

號你可以獲得的自動附加通過使用$\,但你必須自己添加chomp。

以下是-l的工作原理。

$ perl -MO=Deparse -ne 'print $_' 
LINE: while (defined($_ = <ARGV>)) { 
    print $_; 
} 

$ perl -MO=Deparse -lne 'print $_' 
BEGIN { $/ = "\n"; $\ = "\n"; }  # -l added this line 
LINE: while (defined($_ = <ARGV>)) { 
    chomp $_;      # -l added this line 
    print $_; 
} 

(的意見是我的。)請注意,在-l通過-n產生循環的開始添加文字chomp $_(和它只做如果使用-n-p)。沒有變量可以設置爲模仿該行爲。

這是一個鮮爲人知的事實,-l-n-p通過將樣板文本包裝在您編譯前提供的代碼上工作。

1

你可以把它添加到你的家當行:

#!/usr/bin/perl -l 
+1

謝謝!我以爲我沒有成功就嘗試過這種方法,但是我一定是做了一些其他的錯誤,因爲當我再次嘗試時,它會像預期的那樣工作。 – kjo

+0

不,我說得太快了:上述不適合我(自動chomp不會發生)。 – kjo

3

是,嘗試家當後,使用此在腳本的開始狹窄

$/ = $\ = "\n"; # setting the output/input record separator like OFS in awk 

,並在循環使用:

chomp; 
print; 

或者這樣:

use strict; use warnings; 
use English qw/-no_match_vars/; 

$OUTPUT_RECORD_SEPARATOR = "\n"; 

while (<>) { 
    chomp; 
    print; 
} 

我不推薦使用

#!/usr/bin/perl -l 

一個更好的清晰度=)

perldoc perlvar

+1

這隻提供'-l'的一半功能,它也自動連接輸入線。 – Borodin