http://qs321.pair.com?node_id=1114962


in reply to How can I access object data in a user defined sort cmp function?

The <=> can dig into objects and hashes, so you can use something like $a->key->{'other'} <=> $b->key->{'other'}. Proof of concept:
#/usr/bin/perl use warnings; use strict; use Data::Debug; my @things; push @things, Thing->new() for (1..10); debug @things; my @sorted = sort { $a->key->{'other'} <=> $b->key->{'other'} } @thing +s; debug @sorted; package Thing; sub new { return bless { key => { other => int(rand(42))} }, 'Thing'; +} sub key { return shift->{'key'}; } 1;
I hope that is helpful :)
  • Comment on Re: How can I access object data in a user defined sort cmp function?
  • Download Code

Replies are listed 'Best First'.
Re^2: How can I access object data in a user defined sort cmp function?
by tkguifan (Scribe) on Jan 29, 2015 at 19:37 UTC
    This is not the same thing. You are sorting the objects themselves rather than a hash stored within an object. This is a cheat because now $a and $b are object references, so they speak for themselves. If $a and $b are simply keys of a hash, the sort function has no clue to what object they belong. However it is true, as others pointed out, that if I write the compare function in-line instead of a separate function, the in-line code sees the variables of the sub ( including the $self with which it was called ), so it has access to the object.