#!perl use strict; use warnings; foreach my $val ( qw/ one one three two one / ) { print scalar { map { my $intern = $_; map { @{$intern}[$_ - 1, -$_] } (1..@{$_}) } ([(qw/one two three/, reverse (1..3))]) }->{$val}, "\n"; }