В переводе на Perl, вы можете написать:
sub testing
{
my $status;
if (($status = function1($param1, %param2)) &&
($status = function2($param1, %param2)) &&
($status = function3($param1, %param2)) &&
($status = function4($param1, %param2)))
{
# ...do whatever...
}
return $status;
}
Или, учитывая, что $status
просто булево:
sub testing
{
return 0 if !function1($param1, %param2) ||
!function2($param1, %param2) ||
!function3($param1, %param2) ||
!function4($param1, %param2);
# ...do whatever...
return 1;
}
Или:
sub testing
{
return 0 unless function1($param1, %param2);
return 0 unless function2($param1, %param2);
return 0 unless function3($param1, %param2);
return 0 unless function4($param1, %param2);
# ...do whatever...
return 1;
}
Если вы действительно получил 10 функций с идентичными сигнатурами вызова, тогда вы могли бы даже сделать:
sub testing
{
my @funcs = (&function1, &function2, &function3, &function4, &function5,
&function6, &function7, &function8, &function9, &function10,
);
for my $funcref (@funcs)
{
return 0 unless &$funcref($param1, %param2);
}
# ...do whatever...
return 1;
}
Обратите внимание, что первые три альтернативы будут обрабатывать сигнатуры вызова расходящихся функций только с мессианской компоновкой кода; для последнего в значительной степени требуется одна и та же подпись вызова функции для каждой из функций в списке.
Что случилось со всеми сигилами? –
аналогичная статья IF. – ericyoung