错误之处在于您所引用的值已经是像这样的行中的哈希引用
my @eastside = (\$d->{e}, \$d->{ne}, \$d->{se})
您应该简单地省略反斜杠,一切都会起作用。
(顺便说一下,您可能想知道参考文献\
运算符是分布式的,所以你可以写同样的东西
my @eastside = \( $d->{e}, $d->{ne}, $d->{se} )
但那样就不再正确了!)
其他一些要点
你应该利用哈希片在这种情况下,您需要使用多个键提取哈希元素列表。在这种情况下@eastside
只是@{$d}{qw/ ne e se /}
Perl 允许间接运算符->
成对的右大括号和左大括号之间的 和括号被省略,所以$d->{ne}->{data}
可以写成$d->{ne}{data}
您正在打印 a 的结果join
元素之间有一个空值。只需列出要打印的项目即可获得相同的结果。您还可以将哈希元素插入双引号字符串中,因此"\t".$_->{data}."\n"
是相同的"\t$_->{data}\n"
进行这些更改会产生此工作计划
use strict;
use warnings;
# A set of data
my $design = {
box => {
ne => {data => 'north-east'},
nw => {data => 'north-west'},
n => {data => 'north'},
s => {data => 'south'},
e => {data => 'east'},
w => {data => 'west'},
se => {data => 'south-east'},
sw => {data => 'south-west'},
}
};
# Select a design
my $selected = 'box';
# Build some arrays
my $d = $design->{$selected};
my @eastside = @{$d}{qw/ ne e se /};
my @westside = @{$d}{qw/ nw w sw /};
my @northside = @{$d}{qw/ nw n ne /};
# Update one item
$d->{ne}{data} .= " updated!";
# Display
print "Composed of:\n";
print " $_->{data}\n" for @eastside;
output
Composed of:
north-east updated!
east
south-east