home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Perl/codepiece/ref2subroutine

Perl/codepiece/ref2subroutine

Perl / codepiece / ref2subroutine
id: 122 所有者: msakamoto-sf    作成日: 2007-02-21 23:06:26
カテゴリ: Perl 

  • subroutineへの参照を保持する変数と、無名関数の生成を利用し、関数への参照を引数で受け取り、呼び出す関数というトリック例
  • <= Perl 5.8
  • funcref1.pl
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

# Normal Subroutine.
sub func1 {
	print "In func1\n";
}

# Reference to Anonymous subroutine.
my $func2 = sub {
	print "In func2\n";
};

sub func3 {
	print "In func3\n";
}

# Function using Prototype.
sub func_all($$;$) {
	my($f1, $f2, $f3) = @_;
	$f1->(); # how to call subroutine by reference.
	$f2->();
	$f3->() if defined($f3);
}

&func_all(\&func1, $func2);
#         ^^ how to access refernce of subroutine body.

my $hoge_f = \&func3; # get reference.
&func_all(\&func1, $func2, $hoge_f);
  • 出力
C:\in_vitro\perl\lang>perl ./funcref1.pl
In func1
In func2 <------ ここまでが一回目のfunc_all.
In func1
In func2
In func3 <------ 2回目のfunc_allでは、func3も呼んでいる。

無名関数と、関数へのリファレンスを保持できるというのは、Perl-OOPやPerl-COP(Context Oriented Programming)、そしてPerlの美しさで非常に重要な役割を果たしている、に違いない。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2008-12-24 23:07:07
md5:b2e7d495750e4ed82cc2b31f857418d7
sha1:f6bf333fa5c20394210aff0249029b568a4787b4
コメント
コメントを投稿するにはログインして下さい。