有没有办法在Perl中加载配置文件?

时间:2010-04-19 19:59:15

标签: perl unix profile

有没有办法在Perl中加载配置文件?

与shell文件类似:

  

。 〜用户/ .profile中

4 个答案:

答案 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}