2010-04-19 238 views
-1

有沒有辦法在Perl中加載配置文件?有沒有辦法在Perl中加載配置文件?

像貝殼文件:

。 〜用戶/ .profile

+3

Perl不是shell解釋器。爲了讓這個問題變得有意義,你需要解釋一下你正在嘗試閱讀的.profile的哪些方面。 – 2010-04-19 20:40:08

回答

6

您的意思是「profile」的具體含義?

如果您的意思是「檢索您的shell通過.profile設置的shell環境變量的值」,那麼是的 - 您可以通過特殊的%ENV哈希來完成。

如果你的意思是「像在shell中一樣讀取在.profile中設置的實際變量」,這是可能的,但要做到「正確」則需要解析任意shell腳本並清理任何非環境變量賦值, "。 〜/ .profile中; env`「`並解析輸出

如果您的意思是」爲通過單獨配置文件運行的任何Perl程序提供通用配置「,則需要將代碼添加到這些Perl程序中以讀取此配置文件用於讀取各種配置文件)一些CPAN模塊。

如果你的意思是「提供一個通用的配置,運行沒有這些Perl程序任何特殊代碼來讀取一個單獨的配置文件中的任何Perl程序,排序就像任何shell腳本從shell中獲取.profile的東西一樣「,那麼asnwer就是」可能「。你可以利用PERLOPT環境變量來提供可以加載特殊模塊的選項(通過-I)cont確定通過其「import()」設置的配置。 儘管有些可行,但我強烈建議不要使用,這似乎是一個可怕的黑客攻擊。

0
 
$u=`echo -n ~user`; 
open F, "<$u/.profile" || die; 
while(<F>) 
{print} 
1

如果您有(或其他配置通過設立)一個shell腳本bash的配置值,並希望這樣的生效只是一個程序的一次執行的時間,你可以使用一個子shell:

(source ~/my_bash_file.sh; perl my_perl_script.pl) 

可以使用%ENV哈希(見Perl的特殊變量的指標,perldoc perlvar)訪問的Perl shell環境變量:

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 /醚

當作爲(source ~/my_bash_file.sh; perl my_perl_script.pl)執行時,所述輸出爲:

HOME的值是/ home /不通

3

Env::Sourced應該做你所需要的。

use Env::Sourced qw(~/user/profile); 
print $ENV{VARAIBLE}; 
相關問題