#!perl use strict; use warnings; @ARGV=qw(mig main_generator migrations django_migrations django_admin_log myfoo\bar.txt main_generatorZ XXX xxx); my $patt = shift; my $rx = (map {qr/$_/} join '', (map { '([^'.$_.']*)(?:'.$_.')'} $patt=~/./g ))[0] ; my %r; map { $_=~/$rx/ ? push @{$r{join'_', map{sprintf "%02d",length $_} $_=~/$rx/g}},$_ : push @{$r{join'_', map{'99'} 1..length $patt}} ,$_ }@ARGV; print map { join ' ', sort @{$r{$_}},"\n" } sort keys %r; __OUT__ migrations main_generator main_generatorZ django_migrations django_admin_log XXX myfoo\bar.txt xxx