Bha*_*rat 3 perl cpan perl-module
虽然我没有看到任何具有相同名称但具有不同情况的模块,但仅仅是为了好奇,我试图安装Log :: Log4perl并且在安装期间我拼错它'Perl'代替'perl':
% cpan -i Log::Log4Perl
Cannot install Log::Log4Perl, don't know what it is.
Run Code Online (Sandbox Code Playgroud)
当我使用正确的名字时,情况进展顺利:
% cpan -i Log::Log4perl
Run Code Online (Sandbox Code Playgroud)
相同的名称但不同的情况可能会产生冲突 这背后有什么具体原因吗?
ike*_*ami 14
因为
use Foo::Bar;
Run Code Online (Sandbox Code Playgroud)
区分大小写的文件系统(Foo/Bar.pm?foo/bar.pm?FOO/BAR.pm?Foo/Bar.PM?等)会不明确,并且需要遍历目录的内容才能找到文件的名称.(每个元素最多需要9个目录@INC
才能遍历Foo :: Bar.)
bri*_*foy 11
在Perl中,加载的模块use
直接转换到文件系统.像这样的东西use Log::Log4perl
翻译成:
BEGIN {
require 'Log/Log4perl.pm';
Log::Log4perl->import;
}
Run Code Online (Sandbox Code Playgroud)
在具有区分大小写的文件系统的系统上,如果名称不完全相同,则它甚至可能不存在.这在使用和要求的文档中有说明.不同的案例意味着不同的名
因此,当cpan
命令将包名称转换为分发时,它将使用您指定的确切大小写.文件系统可能不区分大小写,但在Perl中,包名称仍然区分大小写.您输入的文字案例是Perl(和cpan
客户端)使用的案例.如果未定义该确切案例的包,则不会发生正确的事情.
我认为这是Perl的主要设计决策之一,并在我的Frozen Perl 2011主题演讲中讨论过它.
奇怪的是,不区分大小写的文件系统可以让你逃脱它,正如使用看起来似乎是INSENSITIVE !! 发表在Perlmonks上.
归档时间: |
|
查看次数: |
600 次 |
最近记录: |