如何在perl里设置系统的环境变量

如何在perl里设置系统的环境变量

小弟现在遇到了如下的问题:
1. 移动一个perl程序到其他目录,就无法运行,原因是程序里用了相对路径,找不到其他的相关文件;
2. 在perl程序里设置全局变量(包括环境变量),希望能够export,被其他的程序来使用。

这两个问题可以归结于一个问题:
如何在perl里设置系统的环境变量,并能够被export给其他程序来使用?

向Perl大侠们指教, 谢谢
最简单的就是使用system命令
system能够设这全局的环境变量吗?

刚才搜了一下,flw大侠好像说用%ENV, 我变量一个小程序叫getenv.pl,如下:

#! /usr/bin/perl -w

while ((my $key, my $value) = each %ENV) {
        print "$key => $value\n";
}
$ENV{'PATH'} = "/home/qq/2008ENV{'PATH'}";

运行:
/getenv.pl
echo $PATH | grep 2008

发现$PATH的值并不包括"/home/qq/2008",这是为什么呢?

执行程序是开了一个子进程
子进程里面的变量怎么可能影响到父进程里面的变量呢?

再深入一点
为什么unix的cd命令是一个“内置”的命令,而不是一个外部的命令?(你去find一下,是没有cd这个命令的)
那是因为如果把cd做成外部命令,则你 cd xx
运行cd的时候开了一个子shell,cd之后的结果不会返回到父shell,所以你cd xx执行完了以后,父shell的路径是不会发生变化的
所以cd是要做成内置的命令
你的观点,我很同意。
实际上,就算通过/etc/profile或者/etc/bashrc 修改,也需要重启才能生效(我通常这样做,不知其他的可能性)

谢谢!

好像谁这样说过:如果提出过分的要求,那肯定是你的设计有问题
我一般就source一下
如果不行的话就log out and login
cd是shell的built-in,跟你说的没关系
%ENV是正解!其余的方法都是非正解。
system命令错了吗?
4楼正解
在一个perl程序中,由于fork出子进程的关系
system和%ENV都无法改变系统的PATH