2009-02-19 15 views

Antwort

9

Wenn Sie das Modul geladen haben, schauen Sie einfach in% INC, aber Sie müssen es nach Dateiname tun.

Wenn nicht, können Sie Module :: Util oder das Modulmodul, das mit Module :: Info geliefert wird, verwenden.

Oder Sie können @INC manuell durchlaufen.

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"; 

(Eine voll Cross-Plattform-Lösung würde Datei verwenden :: Spec statt mit Schrägstrichen anzuschließen.)

Wenn Sie nur ein Modul schnell finden müssen, perldoc -l funktioniert gut als Fayland erwähnt, aber es wird finde kein Modul, das kein POD hat.

+0

Vergiss nicht, wenn du es aus% INC herausziehst, musst du den Modulnamen ein bisschen verändern. Ihr erstes Beispiel müsste lauten: Sagen Sie $ INC {"Foo/Bar/Baz.pm"} –

+0

Sie haben Recht! PS Community Wiki-Antwort, Sie können frei editieren. – Schwern

3

Doh - ich erinnerte mich gerade.

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

Es gibt auch das Programm module_info, das mit Module :: Info geliefert wird. – Schwern

3

Nun, Perldoc können Sie den Dateinamen sagen:

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

oder in% INC aussehen, nachdem Sie das Modul geladen haben.

Danke.

+1

perldoc -l findet keine Module, die kein POD haben. Normalerweise ist das kein Problem. – Schwern

Verwandte Themen