/ / Come posso utilizzare il sistema dei moduli di ambiente in Perl? - perl, moduli ambiente

Come posso utilizzare il sistema dei moduli di ambiente in Perl? - perl, moduli-ambiente

Come si può usare il Moduli ambientali sistema* in Perl?

In esecuzione

system("load module <module>");

non funziona, presumibilmente perché si biforca in un altro ambiente.


* Da non confondere con i moduli Perl. Secondo il Voce di Wikipedia:

Il sistema Environment Modules è uno strumento che aiuta gli utenti a gestire il proprio ambiente shell Unix o Linux, consentendo di creare o rimuovere dinamicamente gruppi di impostazioni variabili d'ambiente correlate.

risposte:

4 per risposta № 1

Sembra il modulo Perl Env::Modulecmd farà quello che vuoi. Dalla documentazione:

Env::Modulecmd fornisce un'interfaccia automatizzata a modulecmd dal Perl. L'uso più semplice di Env::Modulecmd serve per caricare e scaricare i moduli in fase di compilazione, sebbene siano previsti molti altri usi.

Esempio di utilizzo:

 use Env::Modulecmd { load => "foo/1.0" };

2 per risposta № 2

In alternativa, per farlo meno perl-namespace e più come shell ambiente del modulo ambiente, è possibile generare il codice perl di inizializzazione dei moduli ambiente come le altre shell:

do( "/usr/share/Modules/init/perl");
module("load use.own");
print module("list");

Per un esempio di una riga:

perl -e "do ("/usr/share/Modules/init/perl");print module("list");"

(Questo problema, "modulo ambiente perl sorgente" utilizza parole così generiche, che è quasi non ricercabile.)


0 per risposta № 3
system("load module foo ; foo bar");

o, se non funziona, allora

system("load module foonfoo bar");

Immagino che apporti cambiamenti all'ambientevariabili. Per cambiare le variabili d'ambiente di Perl, dovrebbe essere eseguito all'interno del processo Perl. Questo non funzionerà poiché è stato sicuramente progettato solo per essere integrato nella shell. (Potrebbe non essere troppo difficile portarlo, però.)

Se non riesci a riavviare lo script dopo aver caricato il modulo, puoi utilizzare la seguente soluzione alternativa:

use String::ShellQuote qw( shell_quote );

BEGIN {
if (!@ARGV || $ARGV[0] ne "!!foo_loaded!!") {
my $perl_cmd = shell_quote($^X, "--", $0, "!!foo_loaded!!", @ARGV);
exec("load module foo ; $perl_cmd")
or die $!;
}

shift(@ARGV);
}