我正在将bash脚本转换为Perl。我不确定export
的等价物是什么。
LOC=/tmp/1/
export LOC
例如,对于上面两行,什么是等效的Perl代码?
my $LOC = '/tmp/1/';
# what should go here?
答案 0 :(得分:8)
$ENV{LOC} = "/tmp/1";
%ENV
的内容将传播到Perl脚本的子进程的环境中。
答案 1 :(得分:4)
答案 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变量。