うまいぼうぶろぐ

linuxとhttpdとperlのメモ

Params::Validateでパラメータのチェック

perldocでソース読んでたら出てきたので。メモ初級編。サブルーチンで使うと幸せになれそうですね。

引数が与えられたかどうかのチェック

型までは見ない。

use Params::Validate qw(:all);

sub foo {
  my $args = validate( @_, { 
    hoge => 1,     ## mandatory (必須)
    fuga => 0,     ## optional
  });
  print $args->{hoge}, "\n";
  print $args->{fuga}, "\n" if defined $args->{fuga};
}

my %hash = ( hoge => 100, fuga => 200 );
foo( %hash );  
foo( \%hash ); # ハッシュリファレンスでもいける

validateはコンテキストによって返す型が異なる。って書いてた。

引数の型もチェック

typeで型を指定。optional を設定しなければその変数は必須扱い。

use Params:Validate qw(:all);

sub bar {
  my $args = validate( @_, {
    hoge  =>  { type => SCALAR, },
    fuga  =>  { type => ARRAYREF,  optional => 1 },
  });

  print "hoge: ", $args->{hoge}, "\n"       if defined $args->{hoge};
  print "fuga ", @{ $args->{fuga} }, "\n"   if defined $args->{fuga};
}