Perl中的bash导出相当于什么?

时间:2011-09-06 05:24:32

标签: perl bash export

我正在将bash脚本转换为Perl。我不确定export的等价物是什么。

LOC=/tmp/1/
export LOC

例如,对于上面两行,什么是等效的Perl代码?

my $LOC = '/tmp/1/';
# what should go here?

3 个答案:

答案 0 :(得分:8)

$ENV{LOC} = "/tmp/1";

%ENV的内容将传播到Perl脚本的子进程的环境中。

答案 1 :(得分:4)

模块环境(见http://perldoc.perl.org/Env.html

答案 2 :(得分:0)

在bash中,您可能希望执行以下操作:

EXPORT_CMD=/tmp/${0}_exports.bsh
perl ...
chmod +x $EXPORT_CMD
$EXPORT_CMD
rm $EXPORT_CMD

在Perl中,这个:

sub export (@) {
    state $exh;
    unless ( $exh ) {
        my $export_cmd_path = $ENV{EXPORT_CMD};
        open( $exh, '>>', $export_cmd_path )
            or die "Could not open $export_cmd_path!"
            ;
    }
    while ( @_ > 1 ) { 
        my ( $name, $value ) = (( uc shift ), shift );
        # If you want it visible in the current script:
        {   no strict 'refs';
            ${"::$name"} = $value;
        }
        $exh->print( qq{export $name "$value"\n} );
    }
}

然后,这只是编码的问题:

export LOC => '/tmp/1/';

问题是大多数程序无法更改调用它们的shell变量。