影响Perl模块搜索位置的所有方法是什么?或者,Perl的@INC是如何构建的?
我们知道,Perl使用@INC包含目录名的数组来确定搜索Perl模块文件的位置.
在StackOverflow上似乎没有全面的"@INC"FAQ类型的帖子,所以这个问题是一个问题.
.pm(Perl模块)和.pl(Perl脚本)文件有什么区别?
还请告诉我为什么我们1从文件返回.如果返回2或其他任何东西,它不会产生任何错误,那么为什么我们1从Perl模块返回?
我试着检查我的系统中是否安装了XML :: Simple.
perl -e 'while (<@INC>) { while (<$_/*.pm>) { print "$_\n"; } }'
Run Code Online (Sandbox Code Playgroud)
上面的单行用于列出我系统中安装的所有模块.但是,它没有列出XML模块.
但是,以下执行正常.
perl -e "use XML::Simple "
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?
到目前为止,我使用了ActiveState的ActivePerl,并使用ppm来安装模块.
上周我搬到了Strawberry Perl,但我不知道应该如何使用Strawberry Perl安装模块.有关如何使用Strawberry Perl完成模块安装的一些信息,或者有关于如何安装新模块的一些链接?
如果你忘记了软件包末尾的1,Perl会告诉你"软件包没有返回真值".好吧,如果它知道你忘了它,为什么不把它放在那里呢?
我是一个C/C++/Java/Unix极客,但现在我必须在Windows中编写一个Perl程序.所以我安装了Cygwin,安装了EPIC的Eclipse,并运行了简单的测试程序.我没有可用的Unix机器,我可以运行Eclipse.
但我需要使用Net::TCP::Server,我无法弄清楚如何安装它.它似乎不是Cygwin Perl安装的一部分,我不想花5天时间学习Perl和CPAN以及Perl配置的世界.我只是想写我的程序.
在Cygwin中安装Perl模块的任何简单方法?我觉得这样的事情apt-get install会很好,但我希望这太过于希望了.
谢谢
我遇到了一些Perl模块,例如类似于以下代码:
package MyPackage;
use strict;
use warnings;
use constant PERL510 => ( $] >= 5.0100 );
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw( );
{ #What is the significance of this curly brace?
my $somevar;
sub Somesub {
#Some code here
}
}
1;
Run Code Online (Sandbox Code Playgroud)
1;包围$somevar和Sub 的花括号的意义是什么?
我正在研究一个小的Perl模块,由于某种原因,我有一个测试驱动程序脚本,它使用我的新模块调用我认为是私有的函数之一,并且它是成功的.我很惊讶,所以我开始搜索谷歌,我真的找不到任何关于如何在Perl模块中创建私有函数的文档...
我看到一个地方说要在你的"私人"功能的右大括号之后加一个分号,如下所示:
sub my_private_function {
...
};
Run Code Online (Sandbox Code Playgroud)
我尝试过,但我的驱动程序脚本仍然可以访问我想要私有的功能.
我会做一些简短的例子,但这就是我所追求的:
模块TestPrivate.pm:
package TestPrivate;
require 5.004;
use strict;
use warnings;
use Carp;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
require Exporter;
@ISA = qw(Exporter AutoLoader);
our @EXPORT_OK = qw( public_function );
our @EXPORT = qw( );
$VERSION = '0.01';
sub new {
my ( $class, %args ) = @_;
my $self = {};
bless( $self, $class );
$self->private_function("THIS SHOULD BE PRIVATE");
$self->{public_variable} = "This is public";
return $self;
}
sub public_function {
my …Run Code Online (Sandbox Code Playgroud) 我该如何解决这个错误?
Can't locate Switch.pm in @INC (you may need to install the Switch module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at external/webkit/Source/WebCore/make-hash-tools.pl line 23.
BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.
make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/html/DocTypeStrings.cpp] Error 2
Run Code Online (Sandbox Code Playgroud) 我无法理解EXPORT_OKvs 的区别/用例是什么EXPORT.
大多数资源都提到了以下内容:
@Export允许使用标准导入方法将模块的函数和变量导出到用户的命名空间.这样,我们不需要为模块创建对象来访问其成员.
@EXPORT_OK根据需要导出符号,用于模块的符号(子例程和变量)的选择列表.
但我真的没有看到这里的区别/含义.
有人可以提供这两个符号的差异/用法的一个小基本例子吗?
perl ×10
perl-module ×10
command-line ×1
cpan ×1
cygwin ×1
module ×1
return-value ×1
windows ×1