是否依赖%INC平台的键和值?

cod*_*lic 6 perl cross-platform perlvar

我想获得一个包含模块的完整文件名.考虑以下代码:

package MyTest;

my $path = join '/', split /::/, __PACKAGE__;
$path .= ".pm";

print "$INC{$path}\n";

1;
Run Code Online (Sandbox Code Playgroud)
$ perl -Ipath/to/module -MMyTest -e0
path/to/module/MyTest.pm
Run Code Online (Sandbox Code Playgroud)

它适用于所有平台吗?

perlvar

散列%INC包含用于通过附带的每个文件名的条目do, require或者use运营商.键是您指定的文件名(模块名称转换为路径名),值是找到的文件的位置.

这些密钥是否依赖于平台?我应该使用File::Spec什么?至少在win32上使用ActivePerl /代替\.

更新:%INC价值观怎么样?它们是平台依赖的吗?

Gre*_*con 2

鉴于它是一个标准模块,请采用Module::Loaded中的方法:

sub is_loaded (*) { 
    my $pm      = shift;
    my $file    = __PACKAGE__->_pm_to_file( $pm ) or return;

    return $INC{$file} if exists $INC{$file};

    return;
}

sub _pm_to_file {
    my $pkg = shift;
    my $pm  = shift or return;

    my $file = join '/', split '::', $pm;
    $file .= '.pm';

    return $file;
}
Run Code Online (Sandbox Code Playgroud)

  • @codeholic 您想要哪些平台?请记住,“/”在 Win32 上是有效的路径分隔符,并且比令人讨厌的双回击更好看。不要让 Windows 命令 shell 的 geb0rken *界面* 误导您。 (2认同)