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)
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。