use strict; my $name = 'Server'; my @Server = qw(google google google web gmx ); my @Pfad = qw(start start test mail sms ); my @Datei = qw(index start login test send); my $l = scalar @Server; die "unterschiedlich große Arrays" if $l != scalar @Server or $l != scalar @Pfad or $l != scalar @Datei ; my %Hash = (); for my $index (0..$l-1) { # äußeren Hash-Schlüssel anlegen, Wert ist leeres anonymes Hash: $Hash{$name}{$Server[$index]} = {}; # Pfad als Schlüssel eintragen und leeres anonymes Array als Wert: $Hash{$name}{$Server[$index]}->{$Pfad[$index]} = []; } # inneres Array füllen: for my $index (0..$l-1) { push @{ $Hash{$name}{$Server[$index]}->{$Pfad[$index]} }, $Datei[$index]; } use Data::Dumper; print Dumper \%Hash;