J'ai des problèmes pour imprimer mon contenu de hachage.Question sur le hachage Trier et imprimer en Perl
extrait de code comme cela,
#!/usr/bin/perl -w
use strict;
use warnings;
my (%data, $keyword);
while (my $line = <DATA>){
next unless $line =~ /\S/;
chomp $line;
if ($line =~ /^Keyword/){
$keyword = $line;
}
else {
push @{$data{$keyword}}, $line;
}
}
# How to sort by keys using while loop?
while (my ($k,$v) = each %data) {
print "$k => $v\n";
}
# BTW, foreach loop sorting works.
#foreach my $key (sort (keys(%data))) {
# print "$key \t$data{$key}\n";
#}
__DATA__
Keyword1
data1 a
Keyword2
data2 a
data2 b
data2 c
Keyword3
data3 a
data3 b
Keyword4
data4 a
data4 b
Sortie:
D:\learning\perl>sc4.pl
Keyword3 => ARRAY(0x18418fc)
Keyword1 => ARRAY(0x28925c)
Keyword2 => ARRAY(0x2892fc)
Keyword4 => ARRAY(0x184360c)
En fait, je ne pense pas que la valeur Mot_clé_1 (data1 a
, seule ligne) est MATRICE. Mais la sortie montrait encore qu'il s'agissait d'un tableau.
Pourriez-vous me donner quelques suggestions sur comment l'imprimer correctement.
Apprécié pour votre contribution.
[mise à jour]
mettre à jour mon code pour while loop
pour essayer d'imprimer le tableau de valeurs. mais toujours échoué.
while (my ($k,@v) = each %data) {
print "$k\n";
foreach (@v) {
print Dumper (@v);
print "$_\n";
}
}
sortie:
D:\learning\perl>sc4.pl
Keyword3
$VAR1 = [
'data3 a',
'data3 b'
];
ARRAY(0x189a674)
Keyword1
$VAR1 = [
'data1 a'
];
ARRAY(0x28925c)
Keyword2
$VAR1 = [
'data2 a',
'data2 b',
'data2 c'
];
ARRAY(0x2892fc)
Keyword4
$VAR1 = [
'data4 a',
'data4 b'
];
ARRAY(0x1841a74)
I déjà défini une autre boucle foreach inclus pendant que la boucle de traiter les valeurs de tableau. Mais ça ne marche pas bien. Je ne sais pas pourquoi?
Oui, même la valeur keyword1 est un tableau, parce que vous appuyez sur le tableau '$ data {mot-clé $}' - qui crée le tableau. – Konerak