Sorting

I want to sort an array of arrays.

I use the line

sort byName @records;

where byName is defined as

sub byName{
      return $records[$a]->[$SITENAME] cmp $records[$b]->[$SITENAME];
}

Please explain why this doesn't work.
LVL 4
rafisternAsked:
Who is Participating?
 
ozoConnect With a Mentor Commented:

0
 
arhnoldCommented:
Just to clarify:  Do you want each subarray sorted within itself or are you trying to do some sort of sorting between the subarrays?
0
 
ozoCommented:
try
  @records[ sort byName (0..$#records)];
or
  sort {$a->[$SITENAME] cmp $b->[$SITENAME]} @records;
0
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

 
rafisternAuthor Commented:
arnhold,
I have a set of arrays which contain dat that I read from a flat file database. I want to sort the arrays so that they will be in ascending order sorted by a key field (the name of the item to which all the data in the record refers).

ozo,
I will try your suggestions.

Thanks,
Rafi
0
 
rafisternAuthor Commented:
ozo,
It doesn't work. Anyone know what the correct syntax is for this operation? I could always write my own sorting routine.. but it's a shame not to use the existing function "sort".
0
 
ozoCommented:
What doesn't work.
How is @records defined?
0
 
rafisternAuthor Commented:
I just found the answer myself.
@records= was missing at the beginning of the line!
What a stupid mistake!!

Thanks, guys.
0
 
rafisternAuthor Commented:
P.S.
ozo, I will give you points for your answer because your syntax was correct although you didn't find my other mistake. Post me a blank answer.
0
 
ozoCommented:
> you didn't find my other mistake
How could I, when you didn't tell me you wanted to replace @records with the sorted array?
That's why I asked what wasn't working.
0
 
rafisternAuthor Commented:
It's not really worth arguing about but the line which I posted:

sort byName @records;

has got to be just one of the most useless lines of code as it doesn't return anything. Thanks for the correct syntax for the sorting function. It's now working fantastically.
0
 
ozoCommented:
If that's the complete statement, yes, and perl -w will even warn you about that.
But besides assigning it to @records, you might have wanted to return it from a sub, or assign it to something else, or print it, or map it, or foreach over it, or pass it to another function...
Anyway, I'm glad it's working for you now.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.