2013-04-17 75 views
1

我試圖用$name =~ s/\.url$//;.url擴展提取文件名沒有找到然而,一些名字包含一個感嘆號只是延期前,如:慶典!的.url「:事件而提取的文件名

"for example-this!.url" "and-something-else!.url" 

這將導致Perl來發出錯誤並停止運行:

bash: !.url": event not found 

有沒有辦法來克服這個問題下面顯示了我使用的相關代碼的一部分:

foreach my $f (@ARGV) { 
my (undef, $dir, $name) = File::Spec->splitpath($f); 
$name =~ s/\.url$//; 
+0

單引號文件名? – Koterpillar

+0

@Koterpillar,我不能因爲一些文件名已經包含單引號。 –

+0

是否有包含雙引號的文件名? – Koterpillar

回答

2

當您啓用歷史記錄展開功能(這是默認設置)時,您會收到error

爲了禁用,執行

set +o histexpand 

在命令行上。

+0

非常感謝!解決了它。 –

1

錯誤不是來自Perl,而是來自bash。您可能希望將文件名存儲在一個文件中並從那裏讀取它們。請注意,只有當bash解析命令行輸入時纔會出現此問題。當腳本從文件,管道等中讀取文件名時,不會有任何問題。

+0

我看..對不起,我剛開始學習perl。你能告訴我如何將它移植到@ARGV變量。謝謝。 –