Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 187
  • Last Modified:

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.
0
rafistern
Asked:
rafistern
  • 5
  • 5
1 Solution
 
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
 
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
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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:

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

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 5
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now