$str = join "\n", map { $_->[0] } sort {$a->[THIRD_FIELD] cmp $b->[THIRD_FIELD] } map { [$_, split('\|', $_)] } split(/\n/, $str); #### split(/\n/, $str); #### map { [$_, split('\|', $_)] } split(/\n/, $str); #### ( ["abc|123|cde", "abc", 123, "cde"], ["def|222|eee", "def", 222, "eee"]) #### sort {$a->[THIRD_FIELD] cmp $b->[THIRD_FIELD] } #### sort {$a->[THIRD_FIELD cmp $b->[THIRD_FIELD] || $a->[FIRST_FIELD cmp $b->[FIRST_FIELD]} #### join "\n", map { $_->[0] }