与this question regarding Ruby类似,我想有条件地将参数传递给方法。目前,我将其配置如下:
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,}
这是可能的,如果可以的话,我该怎么做呢?
答案 0 :(得分:11)
您可以将三元?:
运算符与列表操作数一起使用:
my $recs = $harvester->listAllRecords(
metadataPrefix => 'marc21',
metadataHandler => 'MARC::File::SAX',
set => 'pd',
$from ? (from => $from) : (),
$until ? (until => $until) : (),
);
也许值得了解"conditional list include" pseudo-operator,在这种情况下可以像
一样工作...
(from => $from) x !!$from,
(until => $until) x !!defined($until),
...
但对于大多数人来说,三元运算符表达式可能更容易阅读。
答案 1 :(得分:5)
另一个选项是构建args的列表(或哈希),然后调用方法:
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);