我试图将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操作进行搜索/字符串匹配,但结果未存储。
我想知道它是否有任何不那么明显的副作用,例如是否自动存储在$_
?
从我所读过的内容中,默认变量是在调用子程序,启动循环或类似程序时自动设置的,但在使用运算符时没有任何内容。
我真的很感激任何帮助或指向适当文档的指示。
答案 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