给定/何时具有未定义的值

sid*_*com 6 perl warnings initialization

在下面的代码中,我收到uninitialized value警告,但仅在第二个given/when示例中.为什么是这样?

#!/usr/bin/env perl
use warnings;
use 5.12.0;

my $aw;

given ( $aw ) {
    when ( 'string' ) { 
        say "string"; 
    }
    when ( not defined ) { 
        say "aw not defined"; 
    }
    default { 
        say "something wrong"; 
    }
}

given ( $aw ) {
    when ( /^\w+$/ ) { 
        say "word: $aw"; 
    }
    when ( not defined ) { 
        say "aw not defined";
    }
    default { 
        say "something wrong";
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

aw not defined
Use of uninitialized value $_ in pattern match (m//) at ./perl.pl line 20.
aw not defined
Run Code Online (Sandbox Code Playgroud)

Qta*_*tax 3

given/when使用“智能匹配运算符”:~~

undef ~~ string是:

undef     Any        check whether undefined
                     like: !defined(Any)
Run Code Online (Sandbox Code Playgroud)

因此这里没有警告。

undef ~~ regex是:

 Any       Regexp     pattern match                                     
                      like: Any =~ /Regexp/
Run Code Online (Sandbox Code Playgroud)

尝试匹配时会产生警告undef