subrutina llamar for contiene perl methods

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.