#!/usr/bin/perl -w use strict; my @array = qw (biology_humananatomy_2 math_riemannhypothesis_1 biology_humananatomy_1 ); my @AoA; for (@array) { push(@AoA,[split /\_/,$_,3]); } my @final = sort {$a->[0] cmp $b->[0] || $a->[1] cmp $b->[1] || $a->[2] <=> $b->[2]} @AoA; for (@final) { print join('_',@$_),$/; } #### biology_humananatomy_1 biology_humananatomy_2 math_riemannhypothesis_1