#!/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;
}