我有一個.sql文件,我正在閱讀我的輸入。假設該文件包含以下內容輸入....如何在Perl中保留哈希的順序?
Message Fruits Fruit="Apple",Color="Red",Taste="Sweet";
Message Flowers Flower="Rose",Color="Red";
現在我已經寫了一個perl腳本生成此文件哈希..
use strict;
use Data::Dumper;
if(open(MYFILE,"file.sql")){
my @stack;
my %hash;
push @stack,\%hash;
my @file = <MYFILE>;
foreach my $row(@file){
if($row =~ /Message /){
my %my_hash;
my @words = split(" ",$row);
my @sep_words = split(",",$words[2]);
foreach my $x(@sep_words){
my($key,$value) = split("=",$x);
$my_hash{$key} = $value;
}
push @stack,$stack[$#stack]->{$words[1]} = {%my_hash};
pop @stack;
}
}
print Dumper(\%hash);
}
我得到以下輸出..
$VAR1 = {
'Flowers' => {
'Flower' => '"Rose"',
'Color' => '"Red";'
},
'Fruits' => {
'Taste' => '"Sweet";',
'Fruit' => '"Apple"',
'Color' => '"Red"'
}
};
現在這裏哈希不保留輸入讀取的順序。我希望我的哈希與輸入文件中的順序相同。 我發現了一些類似Tie :: IxHash的庫,但我想避免使用任何庫。可以幫助我解決任何人嗎?
哈希本身不保存順序。如果您需要保留訂單,請查看使用數組來保持訂單。 – Joel
你有什麼對CPAN模塊? – cjm
對CPAN模塊沒有任何反應......只是試圖找到另一種方法來做到這一點......不使用任何庫。 – Maverick