リストを渡すときに名前を使って順序を意識しないようにする

back
サブルーチンへ引数を渡す場合、通常はリストで渡すことになるので、
呼び出し側では、引数 0 にデータA、引数 1 にデータB ... というような
感じで、順序を把握しておく必要がある

&function($filename, $dirname, $from, $to);

sub function {
  my ($file, $dir, $from, $to) = @_;
  :

そこで、ハッシュを使って、key=value という形でサブルーチンへ値を
渡せばよい

&function('filename'=>$filename, 'dirname'=>$dirname,
          'from'=>$from, 'to'=>$to);

sub function {
  my %arg = @_;

  $arg{'filename'} = "デフォルト値" unless exists $arg{'filename'};
  $arg{'dirname'} = "デフォルト値" unless exists $arg{'dirname'};
  $arg{'from'} = "デフォルト値" unless exists $arg{'from'};
  $arg{'to'} = "デフォルト値" unless exists $arg{'to'};

  :

ちなみに、このデフォルト値をセットする処理は
sub function {
  my %arg = ('filename' => "デフォルト値",
             'dirname' => "デフォルト値",
             'from' => "デフォルト値",
             'to' => "デフォルト値",
             @_);

とすれば、引数で渡す @_ が(キーが存在すれば)デフォルト値を上書きする。

back