perl中的s - / - 和s - / \ Z--是什么意思?

时间:2011-07-02 12:10:11

标签: perl pattern-matching

我是perl的初学者,我对模式匹配有疑问。 我在perl中遇到了一行写的

  $variable =~ s-/\Z--;

随着代码的推进,另外一个变量被分配了

  $variable1 =~ s-/--;

请告诉我这两行是做什么的?  我想知道s-/\Z--s-/--的含义。

4 个答案:

答案 0 :(得分:5)

$variable =~ s-/\Z--;

-在此处用作分隔符。不过,最佳做法建议您使用/{}作为分隔符。

可以重写为:

$variable =~ s{/\Z}{};  # remove a / at the end of a string

考虑:

$variable1 =~ s-/--;

同样,它可以重写为:

$variable1 =~ s{/}{};  # remove the first /

答案 1 :(得分:5)

Perl中的s///运算符是替换操作,它使用一种称为正则表达式的特殊模式对字符串执行搜索和替换。您可以在Perl附带的手册页中阅读有关正则表达式和Perl模式匹配的更多信息:

如果您的系统上没有这些内容,请尝试在Google上搜索相同内容。

使用=~运算符对变量应用替换。因此,以下内容将变量$var中的'foo'的所有实例替换为'bar'。

$var =~ s/foo/bar/;

所有Perl操作符都记录在'perlop'手册页上。

即使最常见的分隔符是斜杠(因此为s ///),您也可以使用任何其他标点符号作为分隔符。因此,在这种情况下,作者决定使用破折号(-)作为分隔符。

以上是使用短划线作为分隔符的相同代码行:

$var =~ s-foo-bar-;

在您的情况下,破折号似乎没有为代码添加任何清晰度,因此最好更新它以使用传统的斜杠代替。

答案 2 :(得分:1)

perl中的s///搜索和替换函数可以与不同的分隔符一起使用,这是在这种情况下完成的。他们已将/替换为减号-或破折号。

s-/--从字符串中删除第一个/s-/\Z--匹配并删除行尾的斜杠。我认为这写得更好:s{/$}{}

答案 3 :(得分:-1)

  1. $variable1 =~ s-/--;可以写成

    $variable =~ s{/}{}xms;
    

    或者

    $variable =~ s/ \/ //xms;
    

    这意味着删除字符串中的第一个/

  2. 关于s-/\Z--,它通常是这样写的

    $variable =~ s{/ \Z}{}xms;
    

    或者

    $variable =~ s/ \/ \Z //xms;
    

    如果它位于字符串末尾(/),则表示删除\Z