7

キーでハッシュをループし、各値を出力するたびに、「連結(。)または文字列での初期化されていない値の使用...」という警告が表示されます。ハッシュは前もって明確に初期化されていますが。必要な出力が出力されますが、特に値に直接(ループの外で)アクセスすると警告なしで機能するため、なぜこれが警告になるのかを知りたいです。

#!/usr/bin/perl
use warnings;
use strict;

my %fruit = ();
%fruit = ('Apple' => 'Green', 'Strawberry' => 'Red', 'Mango' => 'Yellow');

#works
print  "An apple is $fruit{Apple} \n";

#gives warnings
foreach my $key (%fruit)
{
  print "The color of $key is $fruit{$key} \n";
}

#also gives warnings
foreach my $key (%fruit)
{
    my $value = $fruit{$key};
    print "$value \n";
}

上記のコードを検討してください。perlは最初の印刷と2番目の印刷の違いを見ていると思います。しかし、なぜ?ループの外側でハッシュの値を取得することと、ループの内側でhasの値を取得することに違いがあるのはなぜですか?

ありがとう!

4

3 に答える 3

17

リストコンテキストでハッシュを使用すると、キーと値の両方が生成されます。したがって、行foreach my $key (%fruit)はキー、値、キー、値を繰り返し処理します。

必要なのはですforeach my $key (keys %fruit)

于 2013-01-11T09:31:57.677 に答える
2

ループkeys内で使用します。forforeach my $key (keys %fruit)..。

于 2013-01-11T09:37:17.933 に答える
2

する必要がありますforeach my $key ( keys %fruits )。これがあなたが実際にやりたいことだと思います。

于 2013-01-11T09:46:54.197 に答える