在Perl程序中访问shell变量

时间:2011-08-06 03:21:46

标签: linux perl bash

我有这个Perl脚本:

#!/usr/bin/perl

$var = `ls -l \$ddd` ;
print $var, "\n";

ddd是一个shell变量

$ echo $ddd
arraytest.pl

当我执行Perl脚本时,我得到目录中所有文件的列表,而不只是一个文件,其文件名包含在shell变量$ ddd中。

这里发生了什么?请注意,我在Perl脚本的反引号中转义$ ddd。

3 个答案:

答案 0 :(得分:5)

在您从Perl脚本调用的shell中,变量$ddd未设置*。

普通的shell变量不会被子进程继承。环境变量是。

如果您希望这样做,您需要在调用Perl脚本之前在shell中执行以下操作之一:

ddd=arraytest.pl ; export ddd # sh

export ddd=arraytest.pl       # bash, ksh, zsh

setenv ddd arraytest.pl       # csh, tcsh

这将使您的Perl脚本可以看到环境变量$ddd。但是,将它称为$ENV{ddd}可能更有意义,而不是将文字字符串'$ddd'传递给shell并让它扩展它:

$var = `ls -l $ENV{ddd}`;

答案 1 :(得分:3)

你忘了export ddd

  

将每个名称标记为传递给环境中的子进程。

因此子进程无法自动使用ddd

答案 2 :(得分:2)

哈希%ENV包含您当前的环境。

$var = `ls -l $ENV{ddd}`;

/ edit - 它工作,检查,当然ddd需要在运行脚本之前导出

export ddd='arraytest.pl'
perl script.pl