2014-02-21 55 views
0

我想知道的

"$0 =~ s!.*/!!" 
在Perl

的意思,我怎麼能學這個語法? 歡迎各類答案。

+1

請參閱perl參考文檔; ['perlvar'](http://perldoc.perl.org/perlvar.html)('$ 0'),['perlop'](http://perldoc.perl.org/perlop.html)('=〜 '和'///')和['perlre'](http://perldoc.perl.org/perlre.html)('。* /')在這裏是相關的。一本好書不會傷害:) – user2864740

+0

......除非它真的在雙引號內,在這種情況下'perlop'部分只是字符串的文字元素。 – tripleee

+1

@tripleee哦,天啊!我甚至沒有考慮到:> – user2864740

回答

8

這會將腳本的名稱($0)截斷爲其基本名稱。它對診斷有用。如果沒有截斷,您的警告消息

warn "$0: Failed to mumble" 

會出來爲

weird/long/path/to/mumble.pl: Failed to mumble at line 3. 

而用截斷,它顯示

mumble.pl: Failed to mumble at line 3. 

所以它只是一個可讀性的調整的警告消息,真的。但這是一個常見的成語。

初學者的難點可能是認識到s!foo!bar!只是另一種說法s/foo/bar/。當你需要對包含斜槓的字符串進行替換時,這是天賜之物。如果沒有這個語法糖,你需要反斜槓s/.*\///,這對於單斜線來說不是太可怕,但很快就會導致leaning toothpicks

+0

回想起來,也許這個例子應該包括「切換到口吃模式」。 – tripleee

+0

是的,最難的部分是爲初學者實現s!foo!bar。 – lanyun

相關問題