我正在将一个bash脚本转换成Perl。我不确定export
的等效语是什么。
LOC=/tmp/1/
export LOC
例如,对于上面的两行代码,等价的Perl代码是什么?
my $LOC = '/tmp/1/';
# what should go here?
模块 Env(参见 http://perldoc.perl.org/Env.html)
use Env;
)。因此,如果您知道需要 $ENV{LOC}
,那么没问题:use Env qw(LOC);
。如果您在脚本执行过程中决定需要一个新的环境变量,则似乎只能使用 $ENV{NEWVAR}
机制而不是模块 Env
。 - Jonathan Leffler$LOC
而不是$ENV{LOC}
,我认为这只会让事情变得更加难以理解。(而且它将$PATH
视为Perl数组。) - Keith Thompson在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/';
set FOO=1
,perl -e '$ENV{FOO}=2
,echo %FOO%
。 - mob