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

use*_*032 3 regex perl

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

  $variable =~ s-/\Z--;
Run Code Online (Sandbox Code Playgroud)

随着代码的继续,分配了另一个变量

  $variable1 =~ s-/--;
Run Code Online (Sandbox Code Playgroud)

你能告诉我这两行是做什么的吗?我想知道什么是意思s-/\Z--s-/--意思.

Ala*_*avi 7

$variable =~ s-/\Z--;
Run Code Online (Sandbox Code Playgroud)

-在这里用作分隔符.但是,最佳做法建议您使用/{}作为分隔符.

它可以重写为:

$variable =~ s{/\Z}{};  # remove a / at the end of a string
Run Code Online (Sandbox Code Playgroud)

考虑:

$variable1 =~ s-/--;
Run Code Online (Sandbox Code Playgroud)

同样,它可以重写为:

$variable1 =~ s{/}{};  # remove the first /
Run Code Online (Sandbox Code Playgroud)


Mat*_*all 6

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

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

将替换应用于变量是由=~运算符完成的.所以下面$var用'bar' 替换变量中'foo'的所有实例.

$var =~ s/foo/bar/;
Run Code Online (Sandbox Code Playgroud)

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

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

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

$var =~ s-foo-bar-;
Run Code Online (Sandbox Code Playgroud)

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