Nigel Peck - MIS Web Design <[EMAIL PROTECTED]> wrote: : : Hi all, : : I'm sure I'm just being stupid here but I can't see where: : : I have an array of hash references that I'm trying to sort by : one of the key/value pairs in the hashes (see code below). : : I get various errors, the current one being: : : Can't coerce array into hash at : /web/secure.miswebdesign.com.on-water/cgi-bin/manager.pl line 2392. : : Line 2392 is the line where the sortfunc function is defined. : : =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= : my @boat_list; : foreach my $boat ( $boats->findnodes("//boat") ) { : my $section; : foreach my $ab ( $boat->findnodes("section") ) { : ($section = $ab) if ($ab->getAttribute("title") : eq "General Details"); : }
You really should test that $section has a value in it. : my $boat_details = {}; : $boat_details->{num} = $boat->getAttribute("num"); : $boat_details->{name} = : $section->findnodes("name")->[0]->firstChild->data; : $boat_details->{type} = $boat_type->getAttribute("title"); : $boat_details->{price} = : $section->findnodes("price")->[0]->firstChild->data; : push @boat_list, $boat_details; It's doesn't fix the problem, but this could be re-written this way: push @boat_list, { num => $boat->getAttribute("num"), name => $section->findnodes("name")->[0]->firstChild->data, type => $boat_type->getAttribute("title"), price => $section->findnodes("price")->[0]->firstChild->data, }; : } : : sub sortfunc { $a->{name} cmp $b->{name}; } : my @sorted_boats = sort sortfunc @boat_list; : =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= It would appear that @boat_list has something in it other than what is expected. Try dumping @boat_list to see what is in it. TEST: #!/usr/bin/perl use strict; use warnings; use Data::Dumper 'Dumper'; my @sorted_boats = sort sortfunc ( { name => 'foo' }, { name => 'bar' }, { name => 'baz' }, ); print Dumper [EMAIL PROTECTED]; sub sortfunc { $a->{name} cmp $b->{name}; } __END__ HTH, Charles K. Clarkson -- Mobile Homes Specialist 254 968-8328 -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>