Perl替换运算符作用于字符串的返回值及代码行为疑问
Perl替换运算符返回值与代码行为解析
首先明确Perl里s///替换运算符在标量上下文下的返回规则:
- 成功匹配并完成替换时,返回实际发生的替换次数(非零数值,布尔判断中视为
true) - 没有匹配到目标内容时,返回空值(布尔判断中视为
false)
再看你给出的代码逻辑:
my $w = "-foo"; my $v = $w =~ s/-//?0:1; print "---- $v\n";
这里用了三元运算符条件?值1:值2,逻辑是:
- 如果
$w =~ s/-//的结果为true(匹配替换成功),就把0赋值给$v - 如果结果为false(匹配失败),就把1赋值给$v
两种场景的具体分析
- 当
$w = "-foo"时:s/-//成功匹配并删除了开头的-,返回1(布尔true),触发三元运算符的0分支,所以$v=0,输出---- 0 - 当
$w = "foo"时:s/-//找不到任何-可以替换,返回空值(布尔false),触发三元运算符的1分支,所以$v=1,输出---- 1
内容的提问来源于stack exchange,提问作者smith
相关产品推荐
相关产品推荐

