所以我有以下代码可行:
my $cmp;
if ( $action eq DEL ) {
$cmp = \&cmpb;
}
else {
$cmp = \&cmpf;
}
foreach my $x ( sort $cmp keys %y ) {
# do something
}
Run Code Online (Sandbox Code Playgroud)
这里的cmpb和cmpf是:
sub cmpf { $a cmp $b }
sub cmpb { $b cmp $a }
Run Code Online (Sandbox Code Playgroud)
现在我的问题是我宁愿做类似的事情:
foreach my $x ( sort $action eq DEL ? \&cmpb : \&cmpf keys %y ) {
# do something
}
Run Code Online (Sandbox Code Playgroud)
甚至更好:
foreach my $x ( sort $action eq DEL ? { $a cmp $b } : { $b cmp $a } keys %y ) {
# do something
}
Run Code Online (Sandbox Code Playgroud)
所以有两个问题.首先,将这些功能内联的正确方法是什么,其次,为什么不进行上述工作?
还考虑一下
foreach my $x ($action eq DEL ? reverse sort keys %y : sort keys %y) {
Run Code Online (Sandbox Code Playgroud)
这是非常紧凑和可读的.Perl reverse sort
通过反转所有比较来优化; 它不会以一种方式对列表进行排序,然后将其反转.