我想就地編輯一堆使用Perl就地編輯運算符$^I的文本文件。我通過目錄使用金剛石(<>)運算符這樣的穿越:使用Perl的鑽石和就地編輯運算符就地編輯目錄中的多個文件
$^I = ".bak";
@ARGV = <*.txt>;
while (<>)
{
s/((?:^|\s)-?)(0+)(?=\s|$)/$1.$2/g;
print;
}
這工作完全並執行我需要做的工作。但是如果我的@ARGV已經填充了我需要的一些其他數據呢?我試圖做到以下幾點:
$^I = ".bak";
my @files = <*.txt>;
while (<@files>)
{
s/((?:^|\s)-?)(0+)(?=\s|$)/$1.$2/g;
print;
}
但它不起作用。我在這裏錯過了什麼?我不能使用我的$ ARGV,因爲它包含其他數據,不能將它與文件匹配模式混淆。
有什麼建議嗎?
謝謝!
其實我想過這個辦法了。但我認爲我在使用鑽石操作員的方式犯了錯誤。出於好奇,有沒有辦法做到這一點,而不是首先創建ARGV副本? – 2012-02-10 17:44:27
@GolamKawsar當然。但並不容易。您可以簡單地寫出完整地進行就地編輯的代碼。不過,我不確定這會是什麼目的。 – TLP 2012-02-10 17:49:28
@GolamKawsar未修改的'while(<>)'的行爲綁定到所謂的「魔術'ARGV'」文件句柄上,該文件句柄(不出所料,基於它的名字)與'@ ARGV'數組相連。如果你想要那個,你需要使用另一個。正如@TLP所說,另一種選擇是,根本不使用magic-'ARGV'或'$^I'並自己編寫相應的代碼。 – hobbs 2012-02-10 18:25:53