我想在我的一個面向對象的包中提供一個排序函數,它接受一個塊並使$ a和$ b像標準的Perl sort
一樣可用。在一個對象中包裝perl的排序功能
首先,我想要在包含該包裹的排序功能包做一個簡化版本:
# 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
}
然後在客戶端的傳遞,它定義了比較器來運行塊爲例用於排序:
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 });
有沒有辦法做我想要做的,同時仍然能夠使用Perl的sort
?
欣賞您在SO上的帖子。 – 2015-01-21 06:34:46
'* {...}語法通過名稱引用全局變量。「這似乎是描述該語法的一種有趣的方式 - 特別是在解釋* typeglob *之後。該語法是另一種編寫* typeglob *的方法,其中* typeglob *表示具有指定名稱的所有全局變量..... – 7stud 2015-01-21 09:20:08
指定所有當前程序包的全局「a」變量,* typeglob * * *對於所有調用者的全局'a'變量,* typeglob *'* {caller。':: a'}將導致當前包的全局'a'變量成爲調用包的全局'a'變量的別名。這意味着當你改變當前包中的全局'a'變量時,它會改變調用者包中的全局'a'變量。* – 7stud 2015-01-21 09:21:33