2009-02-19 9 views

Respuesta

9

Si ha cargado el módulo, simplemente mire en% INC pero debe hacerlo por nombre de archivo.

say $INC{"Foo/Bar/Baz.pm"}; 

Si no lo has hecho, puedes utilizar Module :: Util o el programa module_info que viene con Module :: Info.

$ module_info Module::Build 

Name:  Module::Build 
Version:  0.30 
Directory: /usr/local/lib/site_perl 
File:  /usr/local/lib/site_perl/Module/Build.pm 
Core module: no 

O puede acceder a través de @INC manualmente.

my $module = "Foo::Bar"; 

# Convert from Foo::Bar to Foo/Bar.pm 
my $file = $module; 
$file =~ s{::}{/}; 
$file .= ".pm"; 

my $path; 
for my $dir (@INC) { 
    $path = "$dir/$file"; 
    last if -r $path; 
    $path = undef; 
} 

say defined $path ? "$module is found at $path" : "$module not found"; 

(una solución de plataforma cruzada totalmente usaría File :: Spec en lugar de unirse con barras.)

Si usted sólo tiene que encontrar un módulo rápido, perldoc -l funciona bien como se ha mencionado Fayland, pero lo hará no puede encontrar un módulo que no tenga POD.

+0

No olvide que si lo está sacando de% INC, tiene que modificar un poco el nombre del módulo. Tu primer ejemplo debería ser: di $ INC {"Foo/Bar/Baz.pm"} –

+0

¡Tienes razón! Respuesta de la wiki de la comunidad PS, eres libre de editar. – Schwern

3

Doh - Acabo de recordar.

use Module::Util qw(:all); 

$valid = is_valid_module_name $potential_module; 

$relative_path = module_path $module_name; 

$file_system_path = module_fs_path $module_name; 
+1

También está el programa module_info que viene con Module :: Info. – Schwern

3

Bueno, perldoc se puede saber el nombre del archivo:

[[email protected] ~]$ perldoc -l Catalyst 
/home/fayland/perl5/lib/perl5/Catalyst.pm 

o buscar en% INC después de haber cargado el módulo.

Gracias.

+1

perldoc -l no encontrará módulos que no tengan POD. Por lo general, esto no es un problema. – Schwern

Cuestiones relacionadas