#!/usr/bin/perl # http://perlmonks.org/?node_id=1206433 use strict; use warnings; use List::Util 'shuffle'; use Data::Dump 'pp'; my @before = shuffle qw( namem1100.111 namem0900.111 namem0010.111 namep0000.111 namep0800.111 namep9999.111 ); pp \@before; my @after = sort { $a =~ s/.*([pm]\d+).*/$1/r =~ tr/pm/+-/r <=> $b =~ s/.*([pm]\d+).*/$1/r =~ tr/pm/+-/r } @before; pp \@after;