2012-04-30 9 views
5

¿Hay alguna forma de obtener una ruta absoluta al ejecutable de Perl para el proceso actual?Obteniendo la ruta absoluta al ejecutable perl para el proceso actual

$^X me dará el nombre del ejecutable Perl, pero el documento afirma que a veces va a ser una ruta relativa, y esto parece ser cierto en OS X, por ejemplo.

ExtUtils :: MakeMaker parece tener un poco de magia para encontrar la ruta absoluta, ya que el Makefile se genera en mi OS X contiene

PERL = /usr/local/bin/perl 
FULLPERL = /usr/local/bin/perl 

pero no tengo ni idea de cómo se hace esto o si la magia es fácilmente accesible para otros.

EDIT: Gracias por la punta Borodin $Config{perlpath}. Ampliando para esto en ExtUtils, encontré este tidbit en ExtUtils :: MM_Unix :: _ fixin_replace_shebang, que creo que es lo que MakeMaker usa para reemplazar #! Perl con la línea de shebang correcta.

 
    if ($Config{startperl} =~ m,^\#!.*/perl,) { 
     $interpreter = $Config{startperl}; 
     $interpreter =~ s,^\#!,,; 
    } 
    else { 
     $interpreter = $Config{perlpath}; 
    } 

Respuesta

8

creo que lo que estás buscando es $Config{perlpath}.

si desea que su código sea muy portátil puede que tenga que añadir un tipo de archivo a ese valor; esto se describe en la documentación perlport. De lo contrario, todo lo que necesita es esto:

use Config; 
my $perl = $Config{perlpath}; 
0

Perl incluye el módulo de núcleo File::Spec que puede traducirse rutas relativas a rutas absolutas.

my $full_path_to_perl = File::Spec->rel2abs($^X); 
+0

Eso no va a funcionar en muchos casos. A menudo '$^X' simplemente dice' perl', en cuyo caso 'rel2abs' le dará la ruta a la CWD, lo cual probablemente sea incorrecto. – friedo

1

Puede obtenerlo a través del módulo Config núcleo.

use Config; 
say $Config{perl5}; # current perl binary 

Yo creo que siempre debe contener una ruta absoluta, pero no puedo garantizarlo.

+0

La documentación de '$ config {}' perl5 es bastante inútil: "Esta variable contiene la ruta completa (si los hay) a un perl5.005 instalados previamente o posteriormente adecuados para el funcionamiento de la secuencia de comandos para determinar inc_version_list." – Telemachus

+1

Usar $ Config {perl5} me da el Perl que está primero en mi PATH, mientras que $ Config {perlpath} me da el Perl que se está ejecutando actualmente. –

Cuestiones relacionadas