#!/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 (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; }
コメント