与
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,}
这是可能的,如果可以的话,我该怎么做呢?
解决方法
你可以使用带有列表操作数的三元?:运算符:
my $recs = $harvester->listAllRecords( MetadataPrefix => 'marc21',$from ? (from => $from) : (),$until ? (until => $until) : (),);
它也可能值得了解“conditional list include” pseudo-operator,在这种情况下会起作用
... (from => $from) x !!$from,(until => $until) x !!defined($until),...
但对于大多数人来说,三元运算符表达式可能更容易阅读.