use Sort::Key::Multi qw( iiskeysort ); my @sorted = iiskeysort { /id=(\d+)(\w*)/ or die; $2 ne "", $1, $2 } @inputs;