我剛剛嘗試使用下面的Perl腳本來使用File :: Slurp模塊進行一些文本替換。對於在命令行(BASH)中作爲參數給出的單個文件,它工作正常。Perl模塊文件:Slurp與STDIN管道
#!/opt/local/bin/perl -w
use File::Slurp qw(edit_file_lines);
foreach my $argnum (0 .. $#ARGV) {
edit_file_lines {
s/foo/bar/g;
print $_
}
$ARGV[$argnum];
}
我想改變它與管道(即STDIN)也應付,這樣它可以在一系列的管道操作的中間: 例如:
command blah|....|my-perl-script|sort|uniq|wc....
什麼是最好的方式來更改Perl腳本,以允許這一點,同時保留現有的能力,在命令行上使用單個文件?
是的,但沒有發現解決我的具體問題。使用File :: Slurp模塊的約束排除了諸如https://stackoverflow.com/questions/3138649/programmatically-read-from-stdin-or-input-file-in-perl?rq=1 – Tim
['edit_file_lines '等同於Perl的'-pi'命令行選項](https://metacpan.org/pod/File::Slurp#edit_file,-edit_file_lines)。你不明白'-pi'的作用或者是否有一些額外的原因,你必須使用'File :: Slurp'完成這個任務? – mob
我編輯了您的問題,將縮進添加到您的代碼中。不客氣,但請下次自己做。如果你要求一大羣人閱讀並理解你的代碼,那麼確保它儘可能地簡單易懂。 –