影响Perl模块搜索位置的所有方法是什么?或者,Perl的@INC是如何构建的?
我们知道,Perl使用@INC包含目录名的数组来确定搜索Perl模块文件的位置.
在StackOverflow上似乎没有全面的"@INC"FAQ类型的帖子,所以这个问题是一个问题.
我收到此错误:
Can't locate Foo.pm in @INC
有没有比下载,解决,制作等更容易安装它的方法?
我在Linux机器上,我没有root权限.我想通过CPAN将一些软件包安装到我的主目录中,这样当我运行Perl时,它就能看到它.
我跑了cpan,这要求一些配置选项.它要求提供一些目录,它建议~/perl"对于非root用户".尽管如此,当我尝试安装软件包时,它在make install步骤中失败了,因为我没有写入权限/usr/lib/perl5/whatever.
如何配置CPAN以便我可以将软件包安装到我的主目录中?
这是我的情况:我对Perl几乎一无所知,但它是移植机器上唯一可用的语言.我只有权在我的本地工作区写入,而不是Perl安装位置.我需要使用CPAN 的Parallel :: ForkManager Perl模块
如何在不进行集中安装的情况下使用此Parallel :: ForkManager?是否有我可以设置的环境变量,因此它位于?
谢谢
JD
如果我的Perl程序使用Perl模块,它将如何确定在哪里找到包含模块代码的文件?
例如,如果程序包含:
use MyModule1; # Example 1
use This::Here::MyModule2; # Example 2
Run Code Online (Sandbox Code Playgroud)
它会在哪里看?
我没有对我的工作遥控盒root权限,所以我使用的描述cpanm和地方:: 11b的组合,在这里安装CPAN模块包装盒上的我的本地目录.使用cpanm,我假设cpanm Module::To::Update会在我的本地库中安装最新版本的模块.
显然,我不需要root权限来使用CPAN升级我的模块,就像我刚刚尝试过的那样,升级过程非常顺利.但是,我仍然很好奇Perl将使用哪个版本的模块:本地版本,还是默认的CPAN版本?或者只使用较新的?
如果这存在于perldoc或Stack Overflow中,我也会很感激.我试过搜索两个,但我找不到它= /
与许多站点托管在共享服务器上的人一样,我没有root访问权限,托管公司也不会根据用户的请求安装Perl模块.
不幸的是,我也没有对~/文件夹的写权限,只对某些子文件夹(如~/cgi-bin/).
我试过这里建议的解决方案,~/perl5改为~/cgi-bin/perl5(我创建的),但我一直收到这个错误:
"不能写入cpanm home'〜/ .cpanm':你应该先用chown/chmod修复它."
问题是,正如我所说,我没有〜/的写权限.
有没有办法告诉安装人员使用~/cgi-bin/.cpanm?我试图通过在这里和互联网上的其他地方搜索来解决这个问题,但我开始抨击我的头撞墙.
编辑:所以我在下面尝试了Steven的建议,使用这个命令:
HOME = $ HOME/cgi-bin cpanm local :: lib
现在,cpanm成功运行并尝试安装模块,但在整个安装过程中有很多警告并最终失败(可能是某些东西仍在尝试写入禁用文件夹?).
以下是一些示例警告:
警告:未找到先决条件CPAN 1.82.我们有1.7601.
警告:未找到先决条件ExtUtils :: Install 1.43.我们有1.32.
警告:未找到先决条件ExtUtils :: MakeMaker 6.42.我们有6.17.
警告:找不到先决条件Module :: Build 0.36.
警告:您无权在/usr/lib/perl5/5.8.5/ExtUtils/Install.pm第114行安装到/usr/lib64/perl5/5.8.5/x86_64-linux-thread-multi.
mkdir /usr/lib/perl5/5.8.5/App:/usr/lib/perl5/5.8.5/ExtUtils/Install.pm第176行中的权限被拒绝
make:***[pure_perl_install]错误255
灵感来自如何将CPAN用作非root用户?我想知道,如何为非登录用户设置cpanm(比如www)?没有登录,所以我不知道如何包含一些目录@INC.
编辑:如何为非登录用户设置PERL5LIB的永久环境变量?我无法设置它.bashrc(需要登录)而不是/etc/environment设置(设置为每个人).
我有一个脚本,它使用标准Perl库外部的模块,并希望以某种方式使用它们.我没有权限将它们安装到Perl lib目录中,并且想知道我是否可以将这些外部模块驻留在我的脚本目录中.
我已经阅读了有关使用FindBin的内容,但似乎无效.我正确使用它吗?
现在我想使用我想要使用的3个模块(2个是目录).因此,假设我的脚本位于Dir1中,那么我的模块将位于Dir1的子目录中,称为Dir2.
所以假设FindBin找到了Dir1,那我所要做的就是这个吗?
use FindBin '$Bin';
use Dir2 "$Bin/Dir2";
use Dir2::SubDir_ofDir2_1::Module1;
use Dir2::Module2;
use Dir2::Module3;
Run Code Online (Sandbox Code Playgroud)
我的程序似乎运行但它没有做任何事情.所以我很确定它没有正确导入模块.
谢谢
我有一个包含数字的二维数组.我试图计算出每个子阵列中的单个数字与每个其他子阵列中的一个相乘的乘积; 然后,我需要为所有可能的组合执行此操作.
目的是我输入一个单独事件频率的文件,并获得这些事件发生的特定系列概率的输出,每组中有一个事件.
我在前一个问题的帮助下将一些代码混合在一起:
for my $aref ( getCartesian(@freq) ) {
my $p = 1;
foreach my $n (@$aref) {
$p = $p * $n;
}
print "$p\n";
}
sub getCartesian {
my @input = @_;
my @ret = map [$_], @{ shift @input };
for my $a2 (@input) {
@ret = map {
my $v = $_;
map [@$v, $_], @$a2;
}
@ret;
}
return @ret;
}
Run Code Online (Sandbox Code Playgroud)
其中@freq是一个数组数组,例如:
@freq = [0.1, 0.2, 0.3,]
[0.4, 0.5, 0.6,]
[0.7, …Run Code Online (Sandbox Code Playgroud) 如何在没有root且无法访问Internet的情况下使用cpanminus?我知道有关没有root的cpanminus的这个问题,但建议的解决方案需要访问Internet.
因此,我将通过说这是我使用RegExr提出来的,并只是随机输入内容,直到得到所需的内容为止。
我想到的目标是使用json字符串生成数组。
my @valuesArray=$msgPayload=~/((?=["]).+?(?=["])")/g;
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下都有效,但是它只是从一个引号到下一个引号中选择值。当存在诸如true,false或null之类的值时,这将成为一个问题。
示例字符串
..."email":"","lastLogon":null,"pwdChanged":"0","status":"A","phoneNumber":"","extension":"","locale":"en_US","boChecked":false,"boUserId":"","UserId":"TWEH","sChecked":false,...
Run Code Online (Sandbox Code Playgroud)
因此,在实际拆分成数组之前,我通过使用多个替换来解决此问题。
$msgPayload =~ s/:true/:"true"/g;
$msgPayload =~ s/:false/:"false"/g;
$msgPayload =~ s/:null/:"null"/g;
my @valuesArray=$msgPayload=~/((?=["]).+?(?=["])")/g;
Run Code Online (Sandbox Code Playgroud)
现在,我想知道是否有一种方法可以将所有这些组合到一个正则表达式中,在该表达式中还可以选择真正的false和null值而无需先执行替换操作。而且,如果有可能,我觉得这样做会更有效率,但是如果我做错了,我想知道更多。
谢谢!
编辑: 我们没有安装任何模块,并且我怀疑我能为这个项目安装任何模块,因为它是如此之小。我只是想尽我所能。
数据存储在表的varchar列中。这样将收到一个完整的示例。
[ { "signonId" : "", "userId" : "USERNAME", "groupID" : "Master", "userName" : "", "phoneNumber" : "", "extension" : "4444", "emailAddress" : "", "password" : "", "locale" : ""}, { "signonId" : "", "userId" : "USERNAME", "groupID" : "Master", "userName" : "", "phoneNumber" : "", "extension" : "5555", "emailAddress" : "", "password" : "", …Run Code Online (Sandbox Code Playgroud) 我有一条线:
$string = 'Paul,12,"soccer,baseball,hockey",white';
Run Code Online (Sandbox Code Playgroud)
我试着将其拆分为具有4个值的@array
print $array[2];
Run Code Online (Sandbox Code Playgroud)
给
soccer,baseball,hockey
我怎么这样?救命!
perl ×13
cpan ×7
perl-module ×3
install ×2
regex ×2
arrays ×1
combinations ×1
csv ×1
include ×1
installation ×1
module ×1
path ×1
performance ×1
permissions ×1