在perl中是否可以有条件地将选项传递给方法?

在perl中是否可以有条件地将选项传递给方法?,perl,methods,Perl,Methods,类似于,我希望有条件地将参数传递给方法。目前,我将其配置如下: my $recs = $harvester->listAllRecords( metadataPrefix => 'marc21', metadataHandler => 'MARC::File::SAX', set => 'pd', from => $from, until => $until, ); 我希望能够有条件地传递from和/或until参数,

类似于,我希望有条件地将参数传递给方法。目前,我将其配置如下:

my $recs = $harvester->listAllRecords(
    metadataPrefix => 'marc21',
    metadataHandler => 'MARC::File::SAX',
    set => 'pd',
    from => $from,
    until => $until,
);
我希望能够有条件地传递from和/或until参数,具体取决于前面的代码。这在语法上是不正确的,但类似于:

from => $from if ($from),
until => $until if ($until),
或者这个:

if ($from) {from => $from,}
if ($until) {until => $until,}

这可能吗?如果可能,我该怎么做?

您可以将三元
?:
运算符与列表操作数一起使用:

my $recs = $harvester->listAllRecords(
    metadataPrefix => 'marc21',
    metadataHandler => 'MARC::File::SAX',
    set => 'pd',

    $from ? (from => $from) : (),
    $until ? (until => $until) : (),
);
这也可能是值得了解的,在这种情况下,它的工作原理如下

...
(from => $from) x !!$from,
(until => $until) x !!defined($until),
...

但是对于大多数人来说,三元运算符表达式可能更容易阅读。

另一个选项是构建参数列表(或散列),然后调用该方法:

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);

这就是你要找的吗?成功了,谢谢!通过快速的谷歌搜索和一些后续阅读发现了“逻辑定义的Or”(
/
),虽然它与我最初的问题没有多大关系,但似乎非常有用。