在perl中用[] []表示法

CJ7*_*CJ7 4 regex perl

perlcpan模块的文档中看到了这段代码:

$filename =~ s[^.+/][];
Run Code Online (Sandbox Code Playgroud)

这是什么意思?我习惯s//了这个s功能的表示法.

Bor*_*din 10

Perl允许将任何非空白字符用作字符串分隔符.请参阅引用和引用类操作符

包围字符成对,像使用<...>,[...],(...),和{...},而单引号防止插值.否则,该功能与默认分隔符的功能相同

在这种情况下

$filename =~ s[^.+/][]
Run Code Online (Sandbox Code Playgroud)

是相同的

$filename =~ s/^.+\///
Run Code Online (Sandbox Code Playgroud)

但更具可读性

我倾向于喜欢|看起来类似于通常的斜线的管道字符

$filename =~ s|^.+/||
Run Code Online (Sandbox Code Playgroud)

但选择取决于你

  • @ CJ7参见[docs for s s ///`](http://perldoc.perl.org/perlop.html#s%2f_PATTERN_%2f_REPLACEMENT_%2fmsixpodualngcer):"任何非空白分隔符都可以替换斜杠.如果PATTERN由括号引号分隔,则REPLACEMENT有自己的引号对,可能包括或不包括引号,例如,`s(foo)(bar)`或`s <foo>/bar /` ". (3认同)