##
package SCALAR;
sub to {
my ($from, $to) = @_;
return $from > $to
? (reverse $to .. $from)
: ($from .. $to);
}
1;
####
my @data = (
'test12-05-2003this',
'test11-05-2003this',
'test12-06-2003this',
'test12-05-2000this',
);
@data = schwartzian(@data);
print Dumper \@data;
sub schwartzian {
# do I *really* have to use strings here? :(
my $result = [@_]
->map ('[$_,main::get_date($_)]')
->sort('$a->[1] <=> $b->[1]')
->map ('$_->[0]');
return @$result;
}
sub get_date {
my ($month,$day,$year) = shift =~ /(\d+)-(\d+)-(\d+)/;
return "$year$month$day";
}
####
package ARRAY;
sub grep { [eval "grep {$_[1]} \@{\$_[0]}"] }
sub map { [eval "map {$_[1]} \@{\$_[0]}"] }
sub sort { [eval "sort {$_[1]} \@{\$_[0]}"] }
# reverse is not used in this example
sub reverse { [reverse @{$_[0]} ] }
1;