testing testing... perl question
Jonathan Stowe
jns at gellyfish.com
Mon Aug 13 12:50:03 BST 2007
On Mon, 2007-08-13 at 11:31 +0100, Aidan Samuel wrote:
> Hello everyone, I'm new here.
>
> Is it ok to ask a perl question?
Only if you promise to make some cogent on topic posting later.
>
> perl -e '@a = (1..5); print sort $a <=> $b, @a;'
> 012345
>
You'll find that the output of:
perl -e 'print $a <=> $b'
Will give the clue.
> perl -e '@a = (1..5); print sort {$a <=> $b} @a;'
> 12345
>
> When using map and grep I tend to leave off the curly braces and just
> use a comma, but if I try this with sort, I get these odd results.
Compare the respective signatures for sort, map and grep in the perldoc
manpage.
All three allow
<func> BLOCK LIST
whereas only map and grep give
<func> EXPR, LIST
If you have a comma in the arguments to sort then it is parsed as
sort LIST
the expression "$a <=> $b" is evaluated before being passed to sort (and
because at this point they are undefined the result of the comparison is
0 ) you are sorting the list 0,1,2,3,4,5. You can test this further by
assigning values to $a and $b before the sort:
perl -e '$a =1; $b = 2; @a = (1..5); print sort $a <=> $b, @a;'
-112345
And so forth.
/J\
--
This signature kills bloggers
More information about the london.pm
mailing list