2010-04-19 5 views

Répondre

6

Que voulez-vous dire par "profil"? Si vous voulez dire "récupérer les valeurs des variables d'environnement shell que votre shell définit via .profile", alors oui - vous le faites via un hachage spécial %ENV. Si vous voulez dire "lire les variables définies dans .profile" comme le shell lui-même, il est possible mais "right" nécessite soit l'analyse d'un script shell arbitraire et le nettoyage de tout ce qui n'est pas une variable d'environnement ". ~/.profile; Si vous voulez dire "fournir une configuration générique à n'importe quel programme Perl qui s'exécute via un fichier de configuration séparé", vous devez ajouter du code à ces programmes Perl pour lire ce fichier de configuration (il y en a un). un certain nombre de modules CPAN pour lire différents fichiers de configuration).

Si vous voulez dire « fournir une configuration générique à tout programme Perl qui fonctionne sans code spécial dans ces programmes Perl pour lire un fichier de configuration séparé, une sorte de comme n'importe quel script shell obtient le contenu de .profile grâce à shell ", alors l'asnwer est" may be ".Vous pouvez utiliser PERLOPT variable d'environnement pour fournir des options qui chargeraient un module spécial (via -I) cont aining la configuration qui est définie via son "import()". Bien que quelque peu faisable, il semble être un hack terrible que je recommanderais fortement contre l'utilisation.

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

Si vous avez des valeurs de configuration bash (ou autre configuration mise en place par) un script shell et que vous voulez que pour prendre effet que pour la durée d'une exécution d'un programme, vous pouvez utiliser un sous-shell:

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

Vous pouvez accéder à des variables d'environnement du shell en Perl utilisant le hachage %ENV (voir l'index des variables spéciales de Perl, perldoc perlvar):

my $user = $ENV{USER}; 
my $home_dir = $ENV{HOME}; 

Exemple:

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"; 

Lorsqu'il est exécuté comme perl my_perl_script.pl, my_perl_script.pl gravures:

la valeur de HOME est/home/éther

lorsqu'il est exécuté comme (source ~/my_bash_file.sh; perl my_perl_script.pl), la sortie est:

la valeur de la maison est/home/nulle part

3

Env::Sourced devrait faire ce dont vous avez besoin.

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