Wenn die Schlüssel und Werte eines Perl-Hashes genau in der Reihenfolge ausgegeben werden sollen, in der die Daten in den Hash eingefügt wurden, bieten sich die beiden CPAN-Module Tie::IxHash und Tie::Hash::Indexed an.
Standardverhalten von Perl-Hashes bei der Ausgabe
Schlüssel und Wert werden in nicht vorhersagbarer Reihenfolge ausgegeben.
#!/usr/bin/perl
use warnings;
use strict;
my %farbe = ();
$farbe{'Banane'} = 'Gelb';
$farbe{'Zitrone'} = 'Gelb';
$farbe{'Orange'} = 'Orange';
$farbe{'Apfel'} = 'Rot';
my $pattern = "%-20s %-20s\n";
printf( $pattern, 'Obst:', 'Farbe:' );
# Ausgabe in zufaelliger Reihenfolge
foreach my $obst ( keys %farbe ) {
printf( $pattern , $obst, $farbe{$obst} );
}
Das Programm erzeugt folgende Ausgabe:
Obst: Farbe:
Banane Gelb
Apfel Rot
Orange Orange
Zitrone Gelb
Tie::IxHash
Tie::IxHash von Gurusamy Sarathy gibt Schlüssel und Werte eines Hashes genau in der Reihenfolge wieder aus, in der die Schlüssel eingefügt wurden:
#!/usr/bin/perl
use warnings;
use strict;
use Tie::IxHash;
my %farbe = ();
tie %farbe, "Tie::IxHash" or die $!;
$farbe{'Banane'} = 'Gelb';
$farbe{'Zitrone'} = 'Gelb';
$farbe{'Orange'} = 'Orange';
$farbe{'Apfel'} = 'Rot';
my $pattern = "%-20s %-20s\n";
printf( $pattern, 'Obst:', 'Farbe:' );
# Ausgabe in Einfuege-Reihenfolge
foreach my $obst ( keys %farbe ) {
printf( $pattern , $obst, $farbe{$obst} );
}
Das Programm erzeugt folgende Ausgabe:
Obst: Farbe:
Banane Gelb
Zitrone Gelb
Orange Orange
Apfel Rot
Tie::Hash::Indexed
Tie::Hash::Indexed von Marcus Holland-Moritz erledigt die selbe Aufgabe deutlich schneller, da intern XS zum Einsatz kommt
#!/usr/bin/perl
use warnings;
use strict;
use Tie::Hash::Indexed;
my %farbe = ();
tie %farbe, "Tie::Hash::Indexed" or die $!;
$farbe{'Banane'} = 'Gelb';
$farbe{'Zitrone'} = 'Gelb';
$farbe{'Orange'} = 'Orange';
$farbe{'Apfel'} = 'Rot';
my $pattern = "%-20s %-20s\n";
printf( $pattern, 'Obst:', 'Farbe:' );
# Ausgabe in Einfuege-Reihenfolge
foreach my $obst ( keys %farbe ) {
printf( $pattern , $obst, $farbe{$obst} );
}
Das Programm erzeugt folgende Ausgabe:
Obst: Farbe:
Banane Gelb
Zitrone Gelb
Orange Orange
Apfel Rot
Siehe auch