这个Perl语句是什么意思?

时间:2017-04-03 09:32:11

标签: perl operators

我试图将Perl脚本解析为Python。我接下来没有Perl的经验,但它仍然非常顺利。 Perl文档庞大而令人印象深刻。但是,有时会有一些非常神秘的语法,我真的无法理解,而且我不能与脚本的作者沟通。以下让我头疼了很长一段时间了:

sub someSubroutine
{
    my ($var1, $var2, $var3) = @_;

    # some Perl code

    $var2 =~ s|/|\\|g;

    # and then some more code ..
}

我真的没有得到这条特别而孤独的路线

$dst =~ s|/|\\|g;

我清楚它在$var2中使用一些二进制OR操作进行搜索/字符串匹配,但结果未存储。

我想知道它是否有任何不那么明显的副作用,例如是否自动存储在$_

从我所读过的内容中,默认变量是在调用子程序,启动循环或类似程序时自动设置的,但在使用运算符时没有任何内容。

我真的很感激任何帮助或指向适当文档的指示。

1 个答案:

答案 0 :(得分:8)

$var2 =~ s|/|\\|g;

s/pattern/replacement/substitution operator

  

在字符串中搜索模式,如果找到,则替换该模式   用替换文本并返回替换次数   制作。否则返回false(特别是空字符串)。

|不是" 二进制或" - 这是一个分隔符。在s中,您可以使用任何分隔符,尤其是为了便于阅读。

来自perlop Regexp Quote-Like Operators

  

任何非空白分隔符都可以替换斜杠。之后添加空格   使用标识符中允许的字符时的s。如果是单引号   如果使用,则不对替换字符串进行解释(/ e   然而,修饰符会覆盖它。请注意,Perl将反引号视为   正常分隔符;替换文本不会被评估为命令。   如果PATTERN由括号引号分隔,则REPLACEMENT具有   它自己的一对引号,可能包含也可能不包括引号   例如,s(foo)(bar)或s / bar /.

上述内容会替换/\的每个$var2。 (\是转义字符,因此您需要使用\\)。

my $v='/a/b/c';
$v =~ s|/|\\|g;
print "$v\n";
# \a\b\c

此外,

  

如果没有通过=〜或!〜运算符指定字符串,则为$ _变量   被搜查和修改。

$_ = $v;     # assign the $_
s{\\}{/}g;   # substitution on the $_ using bracketed delimiters
print;       # without args prints the $_
# /a/b/c