use constant { IX_FILENAME => 0, IX_RUN => 2, IX_DISTRICT => 8, IX_COPY => 9, IX_TOTAL => 10, }; print Dumper map { Dumper($_), $_->[IX_FILENAME] } sort { $a->[IX_RUN] <=> $b->[IX_RUN] or $a->[IX_DISTRICT] <=> $b->[IX_DISTRICT] or $a->[IX_COPY] <=> $b->[IX_COPY] or $a->[IX_TOTAL] <=> $b->[IX_TOTAL] } map { [ $_, split /_/ ] } @files;