6

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,}

これは可能ですか?もしそうなら、どうすればいいですか?

4

2 に答える 2

12

?:リストオペランドで三項演算子を使用できます。

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),
...

しかし、ほとんどの人にとっては、おそらく三項演算子式の方が読みやすいでしょう。

于 2013-01-17T18:37:58.583 に答える
6

もう 1 つのオプションは、引数のリスト (またはハッシュ) を作成してからメソッドを呼び出すことです。

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);
于 2013-01-17T19:02:50.303 に答える