perl の do 関数
do BLOCK
そのブロックで最終的に評価された値を返す
ようは関数の戻り値と一緒
その場で無名関数を作って即実行するような意味になるようだ
$ perl -le 'print sub { 'foo' }->()' foo $ perl -le 'print do { 'foo' }' foo
使い分けはよくわからない
do EXPR
EXPR
のファイルを読み込んで eval する以下は同じ意味らしい
do 'stat.pl'; # is just like eval `cat stat.pl`;
わりと昔ながらの手法らしい
ちょっとしたツールを書く場合には便利そう
見かけた例
コンフィグファイルを読み込むモジュール
use strict;
use warnings;
use File::Basename qw(dirname);
use Exporter qw(import);
our @EXPORT_OK = qw(config);
{
my $config;
sub config() {
$config //= do {
my $script_dir = dirname $0;
do "$script_dir/config.pl";
};
}
}