$w = 'self-powering';
%h = (self => 'self',
power => 'pauә',
);
if ($w =~ /(\w+)-(\w+)ing$/ && $1~~%h && $2~~%h && $h{$2}=~/ә$/) {
$p = $h{$1}.$h{$2}.'riŋ';
print "$w:"," [","$p","] ";
}
我希望输出为
self-powering: selfpauәriŋ
但我得到的是:
self-powering: [riŋ]
我的猜测是代码错误
$h{$2}=~/ә$/
似乎在我使用时
$h{$2}!~/ә$/
Perl会做我的意思,但为什么我不能得到“自我动力:selfpauәriŋ”? 我究竟做错了什么?有任何想法吗?
一如既往地感谢任何意见/建议/指示:)
答案 0 :(得分:6)
运行时
$h{$2}!~/ә$/
在你的if语句中,$ 1和$ 2的内容被更改为空,因为没有匹配的分组(没有分组)。如果你这样做:
if ($w =~ /(\w+)-(\w+)ing$/){
my $m1 = $1;
my $m2 = $2;
if($m2~~%h && $m2~~%h && $h{$m2}=~/ә$/) {
$p = $h{$m1}.$h{$m2}.'riŋ';
print "$w:"," [","$p","] ";
}
}
我希望你会得到你想要的东西。
答案 1 :(得分:1)
您是否在启用use warnings
的情况下运行?这会告诉您$1
和$2
不是您所期望的。第二个正则表达式,而不是第一个,在您输入if
块后确定这些变量的值。用一个更简单的例子说明:
print $1, "\n"
if 'foo' =~ /(\w+)/
and 'bar' =~ /(\w+)/;