use strict; my @a = ('a'..'f'); my $hash; my $last = 1; for (reverse @a) { $hash->{$_} = $last; $last = {$_ => $hash->{$_}}; } delete $hash->{$a[$_]} for (1..@a);