有没有办法在Perl中加载配置文件?
与shell文件类似:
。 〜用户/ .profile中
答案 0 :(得分:6)
“个人资料”具体是什么意思?
如果您的意思是“检索shell通过.profile设置的shell环境变量的值”,那么是 - 您通过特殊的%ENV
哈希来执行此操作。
如果你的意思是“读取.profile中设置的实际变量”,就像shell本身一样,那么它是可能的,但是“正确”执行它需要解析一个任意的shell脚本并清除任何不是环境变量赋值的东西,或者执行{ {1}}。 〜/ .profile中; env`“`并解析输出。
如果您的意思是“为通过单独的配置文件运行的任何Perl程序提供通用配置”,您需要向这些Perl程序添加代码以读取此配置文件(有许多CPAN模块用于读取各种配置文件)。
如果您的意思是“为任何运行的Perl程序提供通用配置,而不使用Perl程序中的任何特殊代码来读取单独的配置文件,就像任何shell脚本一样从中获取内容。感谢shell“,然后asnwer”可能是“。您可以利用"
环境变量来提供可加载特殊模块(通过-I)的选项,其中包含通过其“import()”设置的配置。 虽然有些可行,但我强烈建议不要使用,这似乎是一个糟糕的黑客。
答案 1 :(得分:3)
Env::Sourced应该做你需要的。
use Env::Sourced qw(~/user/profile);
print $ENV{VARAIBLE};
答案 2 :(得分:1)
如果shell脚本中有bash配置值(或其他配置设置),并希望它仅在程序执行一次的时间内生效,则可以使用子shell:
( source ~/my_bash_file.sh; perl my_perl_script.pl )
您可以使用%ENV
哈希访问Perl中的shell环境变量(请参阅Perl的特殊变量索引perldoc perlvar):
my $user = $ENV{USER};
my $home_dir = $ENV{HOME};
示例:
my_bash_file.sh:
#!/bin/bash
export HOME="/home/nowhere"
my_perl_script.pl:
#!/usr/bin/perl
print "the value of HOME is $ENV{HOME}\n";
以perl my_perl_script.pl
执行时,my_perl_script.pl会打印:
HOME的值是/ home / ether
以( source ~/my_bash_file.sh; perl my_perl_script.pl )
执行时,输出为:
HOME的价值是/ home / nowhere
答案 3 :(得分:0)
$u=`echo -n ~user`; open F, "<$u/.profile" || die; while(<F>) {print}