Here's another, slightly different approach to what vsespb is talking about. (But I still don't understand how
$self->specialSort(my ($a, $b))
works!)
>perl -wMstrict -le
"{ package Base;
;;
sub new {
my $class = shift;
return bless({} => $class)->init(@_);
}
;;
sub init {
my $self = shift;
@{ $self->{things} } = (qw(a E d Bee Z cee d C zee E eks), @_);
return $self;
}
;;
sub print {
my $self = shift;
CORE::print qq{@{ $self->{things}} };
}
;;
sub nocase_descending {
my $class_obj = shift;
return lc($_[1]) cmp lc($_[0]);
}
;;
}
;;
;;
{ package Derived;
use parent -norequire, qw(Base);
;;
sub sort {
my $self = shift;
return
CORE::sort { $self->nocase_descending($a, $b) }
@{ $self->{things} }
;
}
;;
}
;;
;;
my $d = Derived->new(qw(SS r QQ p PP q RR s));
;;
$d->print;
;;
my @sorted = $d->sort;
print qq{@sorted};
;;
@sorted = sort @{ $d->{things} };
print qq{@sorted};
;;
print $d;
"
a E d Bee Z cee d C zee E eks SS r QQ p PP q RR s
zee Z SS s RR r QQ q PP p eks E E d d cee C Bee a
Bee C E E PP QQ RR SS Z a cee d d eks p q r s zee
Derived=HASH(0x1e931f4)
Update: Moved print method from Derived class 'up' into Base class (just because I can).