这个Perl语句是什么意思?

mag*_*nus 3 perl operators

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

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

    # some Perl code

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

    # and then some more code ..
}
Run Code Online (Sandbox Code Playgroud)

我真的没有得到这一个特别和孤独的路线

$dst =~ s|/|\\|g;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

jm6*_*666 8

在里面

$var2 =~ s|/|\\|g;
Run Code Online (Sandbox Code Playgroud)

s/pattern/replacement/替换操作符.

在字符串中搜索模式,如果找到,则用替换文本替换该模式,并返回所做的替换次数.否则返回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
Run Code Online (Sandbox Code Playgroud)

也,

如果没有通过=〜或!〜运算符指定字符串,则搜索并修改$ _变量.

$_ = $v;     # assign the $_
s{\\}{/}g;   # substitution on the $_ using bracketed delimiters
print;       # without args prints the $_
# /a/b/c
Run Code Online (Sandbox Code Playgroud)

  • @Magnus,无需删除. (2认同)