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

Perl/codepiece/pseudo_block2

Perl/codepiece/pseudo_block2

Perl / codepiece / pseudo_block2
id: 120 所有者: msakamoto-sf    作成日: 2007-02-25 23:01:35
カテゴリ: Perl 

  • Perl/codepiece/pseudo_blockでは、ブロックに渡す引数をブロックの後ろに持って行く手法を示した。
  • その後、頭が Cool Down した後、何とか引数をブロックの前の第一引数に指定できないかと思案した結果、多少不格好にはなるがとりあえずできた。
  • <= Perl 5.8
  • pseudo_block2.pl
#!/usr/bin/perl
use strict;
use warnings;
use IO::File;

sub pseudo_block($&) {
	my ($fname, $block) = @_;
	my $fh = new IO::File;
	if ($fh->open("<$fname")) {
		$block->($fh);
		$fh->close;
	} else {
		warn "$fname open failed.\n";
	}
}

pseudo_block "test.dat", sub {
	my ($fh) = @_;
	print <$fh>;
};
  • 出力はpseudo_blockと同じ。

見かけ上どう感じるかは個人の主観による。但し、このように引数を前に持ってきてしまうと、 リストを渡せない ことになる。以下のようにしてしまうと、最初の括弧対が、サブルーチンの引数を囲む括弧対として認識されてしまい、エラーになってしまう。

pseudo_block (1, 2, 3), sub {
	my ($x, $y, $z) = @_;
	...        
};

どうしてもリストを渡したい場合は、配列へのリファレンスを渡す。→試しにやってみたらエラーにならず、上手く動いた。

sub hogeblock($&) {
	my ($args, $block) = @_;
	$block->($args);
}
hogeblock [ 1, 2, 3, 4 ], sub {
	my ($args) = @_;
	print @$args;
}


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