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