2012-11-26 9 views
6

Sto creando il mio modulo, chiamiamolo X::Y. Naturalmente, il modulo sarà nel file X/Y.pm.Come può un modulo perl trovare il proprio percorso?

Diciamo che Y deve chiamare un programma esterno, prog. Idealmente mi piacerebbe solo mettere prog in X, quindi posso eseguire X/prog. Mi piacerebbe non avere il percorso completo di hardcode X/prog s e che il modulo funzioni indipendentemente dal set corrente di directory di lavoro.

Come è possibile trovare il percorso completo di un modulo dall'interno di un modulo? O c'è un modo migliore per farlo?

risposta

9

Il percorso completo del file sorgente attualmente in esecuzione viene fornito dal valore letterale speciale Perl __FILE__.

Tuttavia preferirei vedere il programma esterno installato dove dovrebbe essere normalmente, e il percorso è codificato come costante nel codice Perl o incluso nella variabile di ambiente PATH.

-1

Una volta caricato un modulo, il percorso è nella variabile globale %INC. Per guardare in alto, è necessario fare una semplice conversione:

  1. cambiamento :: nel nome del pacchetto per /
  2. aggiungere .pm

Quindi, per trovare la posizione del modulo X::Y, si farebbe guarda in $INC{"X/Y.pm"}.

4

Borodin ha risposto alla domanda, ma alcune informazioni relative:

FindBin - trova la directory che lo script è stato eseguito da (uso all'interno dello script stesso o all'interno di un pacchetto caricato da esso)

Neil Bower's CPAN modules for getting a module's path - recensione dettagliata di moduli per trovare il percorso di un altro modulo.