2
我有下面的代码片段在Perl:为什么我不能以散列格式打印散列表?
my $a1 = [ qw(rock pop musical) ];
my $b1 = [ qw(mystery action drama)];
my $c1 = [ qw(biography novel periodical)];
my %media = (
music => $a1,
file => $b1,
print => $c1
);
我尝试按以下步骤打印:
use Data::Dumper;
print Dumper (%media);
我得到这个:
$VAR1 = 'file';
$VAR2 = [
'mystery',
'action',
'drama'
];
$VAR3 = 'music';
$VAR4 = [
'rock',
'pop',
'musical'
];
$VAR5 = 'print';
$VAR6 = [
'biography',
'novel',
'periodical'
];
它打印出的哈希就像一个列表。我期待的是这样的表示它是一个散列。
$VAR1 = {
'file' => [
'mystery',
'action',
'drama'
],
'music' => [
'rock',
'pop',
'musical'
],
'print' => [
'biography',
'novel',
'periodical'
]
};
但我只有这样,如果我将%media
转换为匿名散列引用。
为什么我在转储哈希表时为什么不能获得类似散列的打印?
这是一种形式的工作 - 虽然对吗?我的意思是,如何从OP中的打印中知道是否正在使用散列或列表? – Cratylus
@Cratylus如果子程序没有原型哈希总是作为列表传递 –
在正常情况下,列表被展平。列表上下文中的散列返回键=值对的列表,没有特定的键顺序。 'print Dumper%hash'将哈希放到列表中。 'print Dumper \%hash'将哈希参数传递给Dumper,并获得更传统的哈希转储格式。我不会说这是一种解决方法 - 它只是如何完成的。列表展平是一项功能。哈希引用也是该语言的一个特征。 – DavidO