my @pdu_nums = 3 .. 8; if ( $order ) { @pdu_nums = reverse @pdu_nums; } # You could check that @nodes >= @pdu_nums here, too. foreach my $pdu_num ( @pdu_nums ) { my $node = shift @nodes; unless ( $node ) { die "A horrible death!\n"; } $map{ $node} = join '', $pdu, '[', $pdu_num, '}'; } #### use List::MoreUtils qw( pairwise ); my @pdu_nums = 3 .. 8; @pdu_nums = reverse @pdu_nums if $order; %map = { $b => "${pdu}[${a}]" } pairwise @pdu_nums, @nodes;