Perlでbind

関数に引数を束縛するbind関数のperl版。

sub sub_bind {
  my ($sub, @args) = @_;
  sub { $sub->(@args, @_); };
}

上位は呼び出すだけにしたい場合などに重宝する。

sub fuga {
  my ($sub) = @_;
  sub_bind($sub, ("c", "d"));
}

sub hoge {
  my ($sub) = @_;
  fuga(sub_bind($sub, ("a", "b")));
}

my $sub = sub_bind( sub { print @_, "\n"; } );
$sub = hoge($sub);

#####

# 呼び出すだけの人
$sub->();  # abcd

最近良く使う。