Perl操作系统环境变量的脚本代码
程序员文章站
2022-04-29 20:09:18
如何用perl脚本操作系统环境变量呢?
想必很多朋友马上就会想到perl中提供的$env这个特殊的哈希变量,对,在$env中完全可以获取到一些系统变量。怎么获取呢?比如想...
如何用perl脚本操作系统环境变量呢?
想必很多朋友马上就会想到perl中提供的$env这个特殊的哈希变量,对,在$env中完全可以获取到一些系统变量。怎么获取呢?比如想要知道path这个系统环境变量的内容,我们可以通过$env{'path'} 来获取。如果想设置path这个环境变量呢,哈,使用$env{'path'}=‘c:\windows\system32'来设置。想获取所有的环境变量列表也很简单,哈希遍历不就可以了~
其实,本文中真正想问的是,你在通过上述方法设置了一个环境变量后,右击"我的电脑"的属性,选中高级选项卡后查看的path变量值真的改变了吗?其实,细心的你会发现,完全没变!但千万不要抱怨perl欺骗了你,它其实并没有欺骗你,而是你没有真正的理解。其实,path变量可以通过设置$env{'path'}来设置,但是这个设置所引起的改变只是session级别的,即你程序级别的。如果还不理解的话,可以想象成打开一个cmd后,输入set path="c:\\royen"所引起的效果,即在这个窗口中运行过程中path环境变量是"c:\\royen",而你再打开一个cmd后的新的窗口的path变量则会发现完全不是”c:\\royen“;
所以想要真正的添加或者改变一个系统环境变量,我们需要求助于注册表帮忙。只要找到环境变量在注册表中存储的位置即可。
一般系统变量可以在注册表 hkey_local_machine\system\currentcontrolset\control\session manager\environment下面可以找到。
实现:
复制代码 代码如下:
my $loc="system\\currentcontrolset\\control\\session manager\\environment";
my $regkey;
$hkey_local_machine->open($loc,$regkey) || die "open registry fail,information:$!\n";
$regkey->setvalueex("perllib",0,reg_sz,"c:\\staf\\bin;c:\\staf\\bin\\perl58");
添加环境变量后,记得重启下机器,以使其生效。