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