2つの名前付きパラメーターのいずれかを受け取るメソッドがあり、そのうちの1つが存在する必要がある場合、Params :: Validateを使用してそれを処理する方法はありますか?
$store->put( content_ref => $stringref );
また
$store->put( path => $path_to_file );
ドキュメントには表示されていませんが、明らかなユースケースのように思われるので、質問する必要があると思いました。
callbacks
これらの線に沿って何かを達成するために使用できます。
#!/usr/bin/env perl
use strict;
use warnings;
package My::Class;
use Params::Validate;
use YAML;
sub new { bless {} => shift }
sub _xor_param {
my $param = shift;
return sub { defined($_[0]) and not defined($_[1]->{$param}) }
}
my %validation_spec = (
content_ref => {
'default' => undef,
callbacks => {
"Provided only if no 'path' is given"
=> _xor_param('path')
},
},
path => {
'default' => undef,
callbacks => {
"Provided only if no 'content_ref' is given"
=> _xor_param('content_ref')
},
},
);
sub put {
my $self = shift;
validate(@_, \%validation_spec);
print Dump \@_;
}
package main;
my $x = My::Class->new;
$x->put(path => 'some path');
$x->put(content_ref => \'some content');
$x->put(path => 'another_path', content_ref => \'some other content');
出力:
--- - 道 -いくつかのパス --- --content_ref -!! perl / ref =:一部のコンテンツ My :: Class :: putへの'content_ref'パラメータ( "SCALAR(0xab83cc)")が渡されませんでした 'パス'が指定されていない場合にのみ提供される'コールバック C:\ temp\v.plの37行目 My :: Class :: put(undef、'path'、'another_path'、'content_ref'、 'SCALAR(0xab83cc)')C:\ temp\v.pl行47で呼び出されます