2013/07/18

daemontoolsのenvdirだけ欲しかったからEnvDir書いた

やっぱりenvdirしたかったので、作りかけだったのをちゃんと実装した。

俺得モジュールです。

使い方

    use strict;
    use warnings;

    # environment from /path/to/envdir/*
    use EnvDir -autoload => '/path/to/envdir', -clean;

-cleanを付けると本家のenvdir同様に%ENVをクリア(PATHのみは/bin:/usr/binになる)して、指定したdirのファイルから%ENVに色々セットします。
envdirをimportするか、OOスタイルで使うとガードオブジェクトが返ってきてスコープを抜けると元の%ENVに戻る

    use strict;
    use warnings;

    # import envdir function
    use EnvDir 'envdir', -clean;

    # Function style
    {
        my $guard = envdir('/path/to/envdir');
        ...
    }

    # OO style
    my $envdir = EnvDir->new( clean => 1 );
    {
        my $guard = $envdir->envdir('/path/to/envdir');
        ...
    }

envdir.plコマンドを添付しているので本家envdirと同じようにも使える

    > envdir.pl ./env sh -c 'echo $PATH'