Ich versuche, eine Sortierfunktion in einem meiner (objektorientiert) Pakete zu machen, die einen Block akzeptiert und stellt $ a und $ b wie der Standard Perl sort
.Wrap Perl Sortierfunktion in einem Objekt
Zunächst wird eine vereinfachte Version von dem, was ich versuche, im Paket zu tun, die die verpackte Sortierfunktion enthält:
# In package My::Object
sub sort {
my $self = shift;
my $block = \&{shift @_};
return sort $block @{$self->{arrayRef}}; # I want to use the passed in block with array data contained in this object
}
Und dann ein Beispiel für einen Client einen Block vorbei, die den Komparator definiert laufen für die Art:
my $obj = My::Object->new([3, 1, 5, 6, 2, 4]); # As an example, these values will be come arrayRef from above
my @sortedVals = $obj->sort({ $a < $b });
gibt es eine Möglichkeit zu tun, was ich versuche, während sie noch in Perl zu verwenden, in der Lage zu tun sort
?
Schätzen Sie Ihre Beiträge auf SO. –
'Die * {...} -Syntax verweist auf eine globale Variable nach ihrem Namen.' Das scheint eine lustige Art zu sein, diese Syntax zu beschreiben - vor allem nach der Erklärung, was ein * typeglob * ist. Das Syntax ist ein weiterer Weg, um eine * Typeglob * zu schreiben, wobei a * Typeglob * alle globalen Variablen mit dem angegebenen Namen darstellt ..... – 7stud
alle aktuellen Pakets global ‚a‘ Variablen zuweisen, die * Typeglob * '* a ', für alle globalen' a'-Variablen des Aufrufers bewirkt der * typeglob * '* {caller.' :: a'} ', dass die globalen 'a'-Variablen des aktuellen Pakets Aliase für die globalen' a'-Variablen des aufrufenden Pakets werden .Das bedeutet, wenn Sie eine globale Variable 'a' im aktuellen Paket ändern, ändert sich die globale Variable 'a' im Paket des Aufrufers. * – 7stud