在以下代码中,我收到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";
}
}
我得到的输出是:
aw not defined
Use of uninitialized value $_ in pattern match (m//) at ./perl.pl line 20.
aw not defined
答案 0 :(得分:3)
given
/when
使用“smartmatch operator”:~~
。
undef ~~ string
是:
undef Any check whether undefined
like: !defined(Any)
因此这里没有警告。
undef ~~ regex
是:
Any Regexp pattern match
like: Any =~ /Regexp/
尝试匹配undef
时会产生警告。
答案 1 :(得分:1)
呼叫when (EXPR)
通常等于when ($_ ~~ EXPR)
。 undef ~~ 'string'
为!defined('string')
,因此您不会收到警告,但undef ~~ /regexp/
为undef =~ /regexp/
,因此您会收到警告。
请参阅Switch Statements in perlsyn
和Smartmatch Operator in perlop
。