我的OS-Distribution提供了rpm-package"perl-obexftp",它安装了Modul"OBEXFTP".这些是文件:
/usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/OBEXFTP.pm
/usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/auto/OBEXFTP
/usr /lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/auto/OBEXFTP/.packlist
/usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/auto/OBEXFTP/ OBEXFTP.bs
/usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/auto/OBEXFTP/OBEXFTP.so
/var/adm/perl-modules/obexftp
我现在正在使用我从源代码构建的Perl.有没有一种简单的方法可以使这个OBEXFTP模块可以访问我的Perlinstallation?
我是Perl的初学者,我正在努力构建构建Perl程序的最佳方法.我精通Python,我习惯于from foo import bar从python模块导入函数和类的python 方式.正如我在Perl中所理解的那样,有很多方法可以做到这一点,.pm和.pl模块,EXPORT和@ISAs,使用和要求等等.初学者不容易弄清楚哪些是差异,每个的优点和缺点(甚至在阅读Beginning Perl和Intermediate Perl之后).
问题所在,我目前的问题与以下句子有关perldoc perlmod:
Perl模块文件的扩展名为.pm.该
use运营商承担这个,所以你不必拼出"Module.pm"加引号.这也有助于将新模块与旧的.pl和.ph文件区分开来.
旧的 .pl准备模块的方式与新的 .pm方式有什么区别?
它们真的是古老而现代的方式吗?(我认为它们是因为Perlmod说的,但我想得到一些关于此的意见).
我在perl脚本中使用perl模块文件:
printtab.pl
use Table;
Run Code Online (Sandbox Code Playgroud)
Table.pm存在于同一目录中printtab.pl,因此只要我从目录执行printtab,它就可以正常执行.
但是如果我从其他地方执行它,例如,使用cronjob,我会收到一个错误,提到找不到该模块@INC.
解决这个问题的正确方法是什么?
我试过了
push @INC, "/path/Table.pm";
Run Code Online (Sandbox Code Playgroud)
但它不起作用.你能告诉我为什么吗?
我找到了use lib它并且它正常工作
use lib "/path";
Run Code Online (Sandbox Code Playgroud)
在这种情况下使用lib是最好的方法吗?
我使用CPAN工具安装LWP,但失败了.然后我使用了PPM工具.我在PPM中找不到LWP,但仅限于libwww-perl(LWP).它们的名称是否相同?
我正在使用Strawberry Perl.
module.pm
package module;
use 5.012;
use warnings;
sub Parse
{
return 1;
}
1;
Run Code Online (Sandbox Code Playgroud)
script.pl
#!/usr/bin/perl -w
use 5.012;
use warnings;
use lib 'C:/';
use module;
print Parse("value");
Run Code Online (Sandbox Code Playgroud)
标准输出
Undefined subroutine &main::Parse
Run Code Online (Sandbox Code Playgroud) 所以,我有一个这样的程序:
#!/usr/bin/perl -w
use strict;
foreach (@data) {
if($_ eq "foo") {
use Foo;
process();
}
if($_ eq "bar") {
use Bar;
process();
}
...
}
Run Code Online (Sandbox Code Playgroud)
每个包含的模块有点类似,唯一的区别是process() - sub的作用.
#!/usr/bin/perl -w
use strict;
sub process {
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题:主脚本的输入是一个(可能很长)的事情列表,而处理该列表我得到连续的"子程序重新定义"错误(显然).有没有办法"取消使用"模块?
由于包含的可能"行动"库可能会在未来增长,我认为这种动态包含模块的方式将是最好的方法.非常感谢您的帮助 :)
伙计们真的很困惑如何使用我刚安装在Perl中的模块.
我在Perl中安装了Corelist模块.我想显示Perl 5.006附带的所有模块.但是通过使用我不理解的代码有一个暗示:
my %modules = %{ $Module::CoreList::version{5.006} };
Run Code Online (Sandbox Code Playgroud)
但是当我这样做的时候
#! usr/bin/perl
use warnings;
use strict;
my %modules = %{$Module::CoreList::version{5.006}};
print %modules;
Run Code Online (Sandbox Code Playgroud)
它给出了这个错误:Module::CoreList::version used only once.我也尝试过
use Module::CoreList;仍然没有运气
我有一个需要在Windows和Linux上运行的Perl脚本.问题是我需要use一个仅适用于Windows的Perl模块.
我试过下面的,但它仍然包括你的WindowsStuff包.
use strict;
if ($^O eq 'MSWin32' ){
use My::WindowsStuff;
}
use File::Basename;
use Getopt::Long;
...
...
Run Code Online (Sandbox Code Playgroud) 在perl,有时需要在use语句中指定函数名称.
例如:
use Data::DPath ('dpath');
Run Code Online (Sandbox Code Playgroud)
会工作但是
use Data::DPath;
Run Code Online (Sandbox Code Playgroud)
惯于.
其他模块不需要指定的函数名称,例如:
use WWW::Mechanize;
Run Code Online (Sandbox Code Playgroud)
为什么?
有没有人知道在Perl运行时迭代Perl程序中实际包含的所有包(即use'd或require'd)的方法?我已经找到了很多关于如何找到所有已安装软件包的答案,但这不是我感兴趣的.我特别希望得到一个程序实际包含的软件包列表.这有可能吗?
顺便说一句,我正在使用Perl 5.26.0.