В настоящее время мне поручено поддерживать кодовую базу Perl, и я наткнулся на блок, подобный этому:
if ($sorttype == 2) {
$subsort = ( sub { $a->{key2} <=> $b->{key2} } );
}
elsif ($sorttype == 3) {
$subsort = ( sub { $a->{key3} <=> $b->{key3} || $a->{defaultKey} <=> $b->{defaultKey} } );
}
elsif ($sorttype == 4) {
$subsort = ( sub { $b->{defaultKey} <=> $a->{defaultKey} } );
}
elsif ($sorttype == 5) {
$subsort = ( sub { $b->{key5} cmp $a->{key5} || $a->{defaultKey} <=> $b->{defaultKey} } );
}
где базовый шаблон выглядит так:
$subsort = ( sub{keyComparison || defaultComparison} );
$subsort
вызывается позже таким образом:
foreach (sort $subsort @dataArray) {
my $data = $_;
...
}
Я не понимаю, как использовать здесь оператор короткого замыкания ИЛИ.
При каких возможных обстоятельствах, если таковые имеются, $subsort
будет определяться defaultComparison
?
В качестве дополнительного вопроса, есть ли смысл оборачивать это в контекст списка (например, в скобках)?
Под этим я подразумеваю:
$subsort = ( sub{keyComparison || defaultComparison} );
# versus
$subsort = sub{keyComparison || defaultComparison};
Примечание:
Если кто-то может придумать более подходящее название для этого вопроса, пожалуйста, отредактируйте его (я подозреваю, что, если бы я смог придумать более подходящее название, мой google-fu не подвел бы меня).