我正在使用未注释的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;意味着什么呢?我不是在问正则表达式,而是在它所表达的表达式上.
只需遵循括号所指示的优先顺序并在当时解决每个语句:
($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)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |