我正在尝试设置一个依赖于几个 Perl 模块的应用程序,但是我要安装到的服务器没有 Internet 连接。我通过 ppd 文件阅读了有关离线模块安装的信息,但是我必须一一解决所有依赖项..考虑到我没有直接的互联网连接,这更加乏味。
我希望找到一个解决方案,在我的 PC 上安装 ActivePerl 并安装我想要的所有库,然后将目录复制粘贴到我的服务器。如果只是修复一些环境变量的问题,那就没问题了。只想知道要修改的最终变量列表。不确定是否必须在要运行的计算机上安装 perl 库?(一个是 32 位平台,另一个是 64 位,但是服务器已经运行了各种 32 位应用程序,所以我希望这不是一个大问题)为了获得最佳兼容性,我计划在两个系统上都安装 ActivePerl 并合并库目录相同。
如果一个文件已经加载了,无论如何都要挂钩,use/require所以我可以抛出一个异常?在我即将到来的时候nextgen::blacklist,如果使用某些模块,我会试图死亡.我正在使用如下所述的object-hook方法perldoc -f require:有三个类似钩子的对象,带有subref的数组和subref.这篇文章中的例子是object-hook,你可以找到我对sub-ref hook的尝试nextgen::blacklist.
我想要的语法是这样的:
perl -Mnextgen -E"use NEXT"
package Foo;
use nextgen;
use NEXT;
Run Code Online (Sandbox Code Playgroud)
理想情况下,它应该抛出这样的消息:
nextgen::blacklist violation with import attempt for: [ NEXT (NEXT.pm) ] try 'use mro' instead.
Run Code Online (Sandbox Code Playgroud)
我尝试了很多不同的方法.
package Class;
use Data::Dumper;
use strict;
use warnings;
sub install {
unshift @main::INC, bless {}, __PACKAGE__
unless ref $main::INC[0] eq __PACKAGE__
;
}
sub reset_cache { undef %main::INC }
sub Class::INC {
my ( $self, …Run Code Online (Sandbox Code Playgroud) 我已经下载了草莓PERL并在Winxp sp3上用CGI Perl Apache编写了一个应用程序.我使用的其中一个库(由其他人编写)使用XML :: LibXML.当我加载页面时,它给出了内部服务器错误.从Apache错误日志中我可以看到此错误:
无法为模块XML :: LibXML加载'C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll':load_file:指定的模块无法可以在C:/strawberry/perl/lib/DynaLoader.pm第190行找到
.C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll存在所有权限.此库也适用于Linux.如果我删除所有需要LibXML的代码,我的应用程序也可以正常工作.
任何人都可以告诉我何时可以在这里发布问题.
在Windows中,安装了Perl模块C:/Perl64/site/lib/.Ubuntu系统中的相应位置是什么?
我是一名 Perl 新手,正在开发一个相当长的模块,我想将其拆分为多个文件,以便于维护和组织。现在看起来像这样
#ABC.pm
package ABC;
use strict;
use warnings;
my $var1;
my $var2;
sub func1 {
#some operations on a $var
}
sub func2 {
#some operations on a $var
}
return 1;
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像
#ABC_Part_1.pm
package ABC;
use strict;
use warnings;
my $var1;
my $var2;
sub func1 {
#some operations on a $var
}
return 1;
Run Code Online (Sandbox Code Playgroud)
#ABC_Part_2.pm
package ABC;
use strict;
use warnings;
sub func2 {
#some operations on a $var
}
return 1;
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是让变量在单独的文件中可见。我尝试使用“我们的”来声明它们,但随后我必须使用我不想做的范围解析运算符。我想将它们视为模块文件中的局部变量,但将它们隐藏到调用脚本中。我还想在调用脚本中只包含一个,例如
#!/usr/bin/env perl
#script.pl
use …Run Code Online (Sandbox Code Playgroud) 是否有一个类似于grep的函数,可以将列表分为与表达式匹配的部分(如grep所做的那样)及其补集?
当然,编写这样的函数非常简单,但我有兴趣知道它是否已经存在并且可以更方便地包含在任何List::Util类似的模块中。
我不明白这里发生了什么:
use PAR { file => 'foo.par', fallback => 1 };
Run Code Online (Sandbox Code Playgroud)
我认为这是一个匿名哈希.一个模块如何use在线上使用它?你能解开一些光吗?
编辑:我对PAR模块不感兴趣.我只是对窗帘后面的工作方式感兴趣.如何配置我的模块?
package JustTesting;
use strict;
use warnings;
sub new {
my $self = {};
bless($self, shift);
END { $self->goodbye() };
return $self;
}
sub goodbye {
print "Goodbye.\n";
}
package main;
my $this = JustTesting->new();
Run Code Online (Sandbox Code Playgroud)
输出:
变量"$ self"不会在./test第10行保持共享.
再见.
显然它可以工作,我可以no
warnings在END块内抑制警告.但我想知道是否有更好的方法来做到这一点.
我尝试使用这样的匿名子:
my $cleanup = sub { $self->goodbye() };
END { $cleanup->() };
Run Code Online (Sandbox Code Playgroud)
然后像这样:
END { sub { $self->goodbye() }->() };
Run Code Online (Sandbox Code Playgroud)
但我总是得到同样的警告.
我在我的主目录中安装了自己的Perl副本,但是我有一些需要Git.pm的Perl脚本,它是Git发行版的一部分,不能从CPAN安装.系统perl使用的Git.pm驻留在/usr/share/perl5/Git.pm.如何将此Git.pm用于自定义perl安装,或者在正确的位置安装另一个Git.pm副本?我应该将它复制到我自己的Perl的lib目录中吗?
我一直在使用perl交互式调试器(基本上perl -d script)
我有一个脚本,导入了相当多的模块,我需要调试问题.
我所做的是启动调试器并重新排队,进入必要的地方.
但这很乏味,因为我需要进入多行代码和函数调用.
问题:让我们说在经过代码行之后,我最终会进入A::B::C::foo()某个模块的功能,这就是我正在调试的问题.
有没有办法在调试会话开始时在该函数中设置一个断点,这样我就可以直接跳到那里而不是逐行遍历代码直到我到达那里为止?
我知道我可以在我的调试器当前的同一个文件中添加一个断点但是如何在此时在调试器范围之外的行中添加一个断点(对于某个任意文件/模块,最终调试器会有到达)?
注意:
只是为了澄清:它A::B::C::foo()与脚本的第X行不一样.它最终在许多模块中的很多其他函数的调用链之后被调用
perl ×10
perl-module ×10
module ×2
activeperl ×1
cgi-bin ×1
debugging ×1
git ×1
installation ×1
list ×1
partition ×1
ubuntu ×1
xml-libxml ×1