return map { if( s/^2// ) { $_; } elsif( /^([01])(\d\d\d)(.*)\Q$;\E(.*)$/ ) { $3 . substr(300-$2,-2) . $4 . "_" . ($str1,$str2)[$1] } } sort map { if( ! /(.*)(\d\d)(.*)_(?:\Q$string1\E|(\Q$string2\E))$/ ){ 2.$_; }else{ (0+defined($4)) . (200-$2) . $1 . $; . $3; } } @strs;