什么是"$ 0 =〜s!.*/!!" perl中的意思?

lan*_*yun 0 perl

我想知道的意思

    "$0 =~ s!.*/!!"  
Run Code Online (Sandbox Code Playgroud)

在perl中,我怎样才能学习这门语法?欢迎各种答案.

tri*_*eee 8

这会将脚本($0)的名称截断为其基本名称.它对诊断很有用.没有截断,你的警告信息

warn "$0: Failed to mumble"
Run Code Online (Sandbox Code Playgroud)

会出来的

weird/long/path/to/mumble.pl: Failed to mumble at line 3.
Run Code Online (Sandbox Code Playgroud)

而截断则显示

mumble.pl: Failed to mumble at line 3.
Run Code Online (Sandbox Code Playgroud)

所以它只是警告信息的可读性调整,真的.但这是一个常见的习语.

初学者的难点可能是实现,这s!foo!bar!只是另一种说法s/foo/bar/.当你需要对包含斜杠的字符串执行替换时,这是天赐之物.如果没有这种语法糖,你需要反斜杠s/.*\///,对于单个斜线不是太可怕,但很快就会导致倾斜的牙签.