赋值的模式绑定运算符

And*_*dre 3 regex perl

我正在使用未注释的perl代码.我遇到了一段文章,对于我来说,作为一个perl初学者看起来太过分了.这是一个简化的适应:

my $foo;
my $bar = "x|y|z|";

$bar =~ s{\|$}{};
($foo = $bar) =~ s{ }{}gs;
Run Code Online (Sandbox Code Playgroud)

据我所知,$bar =~ s{\|$}{}将右侧的正则表达式应用于字符串里面$bar.但这个表达($foo = $bar) =~ s{ }{}gs;意味着什么呢?我不是在问正则表达式,而是在它所表达的表达式上.

TLP*_*TLP 5

只需遵循括号所指示的优先顺序并在当时解决每个语句:

($a = $b) =~ s{ }{}gs;
#^^^^^^^^--- executed first
($a = $b)        # set $a to the value contained in $b
$a =~ s{ }{}gs;  # perform the regex on $a
Run Code Online (Sandbox Code Playgroud)

/g全球修饰符使正则表达式来多次匹配越好,/s修改使得通配符.匹配换行符以及(所以现在真正匹配的一切).该/s修改是多余的了这个表达式,因为没有通配符.它.

请注意,$a并且$b是预先使用的变量sort,您应该避免使用它们.

如有疑问,您可以随时打印变量并查看它们的变化情况.例如:

use Data::Dumper;
my $x = 'foo bar';
(my $y = $x) =~ s{ }{}gs;
print Dumper $x, $y;
Run Code Online (Sandbox Code Playgroud)

输出:

$VAR1 = 'foo bar';
$VAR2 = 'foobar';
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,$ b`(或`$ x`)保持不变.然而,这是一种从未真正需要使用的Perl魔法.我认为将声明分为两部分更具可读性. (2认同)