Perl 패키지의 파일 이름을 어떻게 알 수 있습니까?
문제
Perl 패키지 이름을 파일의 전체 경로로 변환하고 싶습니다.
say package_name_to_path('Foo::Bar::Baz');
/tmp/Foo/Bar/Baz.pm
이 작업을 수행 할 CPAN 모듈이 있다는 것을 알고 있습니까? 다시 찾을 수 없나요?
해결책
모듈을로드 한 경우 %inc를 살펴 보지만 Filename으로 수행해야합니다.
say $INC{"Foo/Bar/Baz.pm"};
그렇지 않은 경우 Module :: Util 또는 Module_Info 프로그램을 사용할 수 있습니다. :: 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
또는 @inc를 수동으로 통과 할 수 있습니다.
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";
(완전히 크로스 플랫폼 솔루션은 슬래시와 결합하는 대신 파일 :: 사양을 사용합니다.)
빠른 모듈을 찾아야하는 경우 perldoc -l
Fayland가 언급 한 것처럼 잘 작동하지만 포드가없는 모듈을 찾지 못할 것입니다.
다른 팁
DOH- 방금 기억했습니다.
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;
Perldoc은 파일 이름을 알려줄 수 있습니다.
[fayland@alpha ~]$ perldoc -l Catalyst
/home/fayland/perl5/lib/perl5/Catalyst.pm
또는 모듈을로드 한 후 %Inc를 찾으십시오.
감사.
제휴하지 않습니다 StackOverflow