2010-01-07 11 views
9

¿Cómo puedo averiguar el nombre de un archivo que fue require 'd, desde dentro de ese archivo? Puedo buscar en %INC para encontrar los nombres de todos los archivos que se cargaron, pero estoy buscando algo como $0 que serviría como la clave en %INC.¿Cómo puedo averiguar el nombre de archivo de un archivo requerido en Perl?

+0

tengo curiosidad por qué te gustaría hacer eso. He estado tratando de pensar en un caso de uso que no sea averiguar dónde está el archivo, o usarlo en una clase generada dinámicamente o similar. –

+0

El archivo es un archivo de configuración que se requiere desde un programa, y ​​quiero que el archivo de configuración extraiga otros archivos de configuración ubicados en el mismo directorio. Tienes razón, en la "programación" normal de Perl, probablemente no necesites esto. –

+0

¿Tiene archivos de configuración dispersos en diferentes ubicaciones? ¿Por qué no 'use lib// mi/conf/dir" 'y evitar las trapacerías? –

Respuesta

9

un simple

my $filename=__FILE__; 
print __FILE__; 

debe hacer ..

también buscan here (does-a-perl-module-know-where-it-is-installed) y here (perldoc on Special-Literals) para obtener más ideas

+0

Gracias, eso fue todo. Curiosamente, no se puede hacer $ INC {__ FILE__} porque eso busca $ INC {'__ FILE__'}, por lo que debe pasar por una variable intermedia. –

+1

Peter: Eso no es del todo inesperado. $ foo {bar} autoquotes, también. __FILE__ se parece a cualquier otro identificador. Cuestiones similares se aplican a las constantes. – tsee

+3

@ Peter Eisentraut: si necesita usar '__FILE__' en un hash, use este' $ INC {'' .__ FILE __} '. Un poco más de tipeo, pero te lleva hasta allí. Todo lo que necesitas es un char de no palabra. – Axeman

Cuestiones relacionadas