在perl中用[] []表示法

时间:2016-03-16 01:25:42

标签: regex perl

我在模块的perl文档中看到了这个cpan代码:

$filename =~ s[^.+/][];

这是什么意思?我已经习惯了s//函数的s表示法。

2 个答案:

答案 0 :(得分:10)

Perl允许将任何非空白字符用作字符串分隔符。见Quote and Quote-like Operators

包围字符成对使用,例如<...>[...](...){...},而单引号则阻止插值。否则,该功能与默认分隔符

的功能相同

在这种情况下

$filename =~ s[^.+/][]

相同
$filename =~ s/^.+\///

但更具可读性

我倾向于选择管道字符|,它看起来类似于通常的斜杠

$filename =~ s|^.+/||

但是选择取决于你

答案 1 :(得分:0)

它只是一种替代模式分隔符。取决于模式的细节 - 特别是,如果模式中有斜杠 - 如果斜杠以外的东西用作分隔符,则人类可能更容易解析表达式。在这种情况下它有点边缘但是,如果你使用斜线,它将看起来像这样:

$filename =~ s/^.+\///;

您可以立即看到更难以找出哪些斜杠是模式的一部分以及哪个分隔模式。在这种情况下,第三个斜杠是模式的一部分,将被解释为结束模式,因此必须进行转义。