0

次のコードで、最初のスマートマッチが一致に失敗して警告が表示Argument "two" isn't numeric in smart matchされるのに、2 番目のスマートマッチが期待どおりに機能する (一致する) のはなぜですか?

use strict;
use warnings;
use feature 'say';

my %h = ("one" => "un", "two" => "deux");
my $v = "two";
my @keys_h = keys %h;

say "matches first form"  if $v ~~ keys %h; # warning, doesn't match
say "matches second form" if $v ~~ @keys_h; # no warning, matches

私はただ使うことができることに気づきました

$v ~~ %h

しかし、最初のスマートマッチが期待どおりに機能しない理由を知りたいです。Perl 5.10.1 を使用しています。

4

1 に答える 1