llamar - ¿Es posible pasar opciones de manera condicional a un método en Perl?
llamar subrutina perl (2)
La otra opción es crear una lista (o hash) de args y luego llamar al método:
my %args = (
metadataPrefix => ''marc21'',
metadataHandler => ''MARC::File::SAX'',
set => ''pd'',
);
$args{from} = $from if $from;
$args{until} = $until if $until;
my $recs = $harvester->listAllRecords(%args);
Similar a esta pregunta con respecto a Ruby , me gustaría pasar parámetros condicionalmente a un método. Actualmente, lo configuro de la siguiente manera:
my $recs = $harvester->listAllRecords(
metadataPrefix => ''marc21'',
metadataHandler => ''MARC::File::SAX'',
set => ''pd'',
from => $from,
until => $until,
);
Lo que me gustaría es poder pasar condicionalmente los parámetros desde y / o hasta, dependiendo del código anterior. Esto no es sintácticamente correcto, pero algo como esto:
from => $from if ($from),
until => $until if ($until),
o esto:
if ($from) {from => $from,}
if ($until) {until => $until,}
¿Es esto posible, y si es así, cómo voy a hacerlo?
Podría usar el operador ternario ?:
Con operandos de lista:
my $recs = $harvester->listAllRecords(
metadataPrefix => ''marc21'',
metadataHandler => ''MARC::File::SAX'',
set => ''pd'',
$from ? (from => $from) : (),
$until ? (until => $until) : (),
);
También puede valer la pena conocer el pseudo-operador "incluir lista condicional" , que en este caso funcionaría como
...
(from => $from) x !!$from,
(until => $until) x !!defined($until),
...
pero la expresión del operador ternario es probablemente más fácil de leer para la mayoría de las personas.