为什么这段代码不符合我的意思?

Mik*_*ke 1 regex perl hash

$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","] "; 
}
Run Code Online (Sandbox Code Playgroud)

我期待输出

self-powering: selfpau?ri?
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

self-powering: [ri?]
Run Code Online (Sandbox Code Playgroud)

我的猜测是代码有问题

$h{$2}=~/?$/
Run Code Online (Sandbox Code Playgroud)

好像我用的时候

$h{$2}!~/?$/
Run Code Online (Sandbox Code Playgroud)

Perl会做我的意思,但为什么我不能得到"自我动力:selfpauәriŋ"?我究竟做错了什么?有任何想法吗?

感谢任何意见/建议/指针:)

Sor*_*gal 6

当你跑步

 $h{$2}!~/?$/
Run Code Online (Sandbox Code Playgroud)

在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","] "; 
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望你能得到你想要的东西.