这是我正在处理的代码片段:
my %photo_details = (
'black_cat' => (
('size' => '1600x1200', 'position' => -25),
('size' => '1280x1024', 'position' => 25),
('size' => '800x600', 'position' => 0),
),
'race_car' => (
('size' => '1600x1200', 'position' => 10),
('size' => '800x600', 'position' => 5),
),
);
my $photo = 'black_cat';
foreach my $photo_detail ($photo_details{$photo})
{
my $size = $photo_detail{'size'};
my $position = $photo_detail{'position'};
print ("size = $size, position = $position\n");
}
我期望得到的是:
我实际得到的是:大小 = 1600x1200,位置 = -25
大小 = 1280x1024,位置 = 25
大小 = 800x600,位置 = 0
循环语句明显有误,因为$size和$position都没有值,并且只循环了一次而不是三次。我尝试了各种变量前缀,但都没有起作用。在 C:\Test.pl 的第23行使用未初始化的值 $size 进行字符串连接 (.) 或字符串 at。
在 C:\Test.pl 的第23行使用未初始化的值 $position 进行字符串连接 (.) 或字符串 at。
大小 = ,位置 =
我做错了什么?
$photo_detail->{$size}
而不是$photo_detail->{size}
。我完全忽略了my $size = ...
声明。尽管如此,我无法复制OP的错误。启用严格模式后,代码会在更早的时候出错,因为%photo_detail
没有被声明(由于for循环没有对数组进行解引用)。 - Ether[foreach my $photo_detail (@{%photo_details->{black_cat}})],将
[$photo_detail{size}]更改为[$photo_detail->{size}],将
[$photo_detail{position}]更改为`[$photo_detail->{position}],它可以工作,但是在foreach行上我得到了“使用哈希作为引用已被弃用”的警告。有什么想法吗? - TallGuy