6

次のコードでは、2 番目の例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
4

2 に答える 2

3

given/ 「whenスマートマッチ演算子」:を使用し~~ます。

undef ~~ stringは:

undef     Any        check whether undefined
                     like: !defined(Any)

したがって、ここでは警告はありません。

undef ~~ regexは:

 Any       Regexp     pattern match                                     
                      like: Any =~ /Regexp/

で照合しようとすると、警告が生成されundefます。

于 2012-06-22T15:16:53.297 に答える
1

when (EXPR)通常は等しい呼び出しwhen ($_ ~~ EXPR)。そして、警告undef ~~ 'string'!defined('string')受けないようにしていますが、警告undef ~~ /regexp/undef =~ /regexp/受けるようにしています。

の Switch ステートメントperlsynと のSmartmatch 演算子をperlop参照してください。

于 2012-06-22T15:18:24.653 に答える