First of all that doesn't work because shift returns a
reference. You need it to dereference the first element into an array. Secondly you know I love a challenge..like 76 characters:
sub o{
($c,$s,$")=@_;sub t{$_=pop;s/./~0+index"@$c",$&/ges;$_}sort{t($a)cmp t
+$b}@$s
}
(I have to waste 3 on removing spaces, dang.)
UPDATE
In 5.6.x it appears you need to spend another character:
sub o{
($c,$s,$")=@_;sub t{$_=pop;s/./1e9+index"@$c",$&/ges;$_}sort{t($a)cmp
+t$b}@$s
}
UPDATE 2
Saving another character..back to 76.
sub o{
($c,$s,$")=@_;sub t{s/./1e9+index"@$c",$&/ges;$_}sort{t($_=$a)cmp t$_=
+$b}@$s
}
UPDATE 3
Throwing in tadman's improvement, 75:
sub o{
($c,*w,$")=@_;sub t{s/./1e9+index"@$c",$&/ges;$_}sort{t($_=$a)cmp t$_=
+$b}@w
}
(Note that chr returning 2 chars wouldn't make Unicode come out right. Hence I am keeping the 1e9 trick.) |