06 Oct 2012

perl の do 関数

do BLOCK

  • そのブロックで最終的に評価された値を返す

  • ようは関数の戻り値と一緒

  • その場で無名関数を作って即実行するような意味になるようだ

    $ perl -le 'print sub { 'foo' }->()'
    foo
    $ perl -le 'print do { 'foo' }'
    foo
    
  • 使い分けはよくわからない

do EXPR

見かけた例

コンフィグファイルを読み込むモジュール

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";
        };
    }
}