小编Yon*_*k64的帖子

任何方法可以关闭 Perl 中“use Module”语句中生成的警告

XML::LibXML我目前正在Perl 脚本中使用该模块。XML::LibXML我们当前在机器上使用的模块是针对较新版本的库进行编译的,libxml2并且 use 语句生成以下警告:

Warning: XML::LibXML compiled against libxml2 20708, but runtime libxml2 is older 20706
Run Code Online (Sandbox Code Playgroud)

该警告不会影响我的脚本的性能。我已经和我的主管谈过了,她说对于我们当前的目的来说,这个错误可以完全忽略。有没有办法暂时关闭此警告而不关闭所有警告?我尝试将use语句包含在代码块内{}并使用 关闭警告no warnings;,但我仍然收到警告。

perl

4
推荐指数
1
解决办法
683
查看次数

在使用严格的subs时,不允许设置bareword环境变量

为了运行我的Perl脚本,我需要在OS上设置一个环境变量来指向我们的开发服务器:

export SERVER=DEV

但是,一旦将脚本分发给我们的用户,我不希望他们每次都需要导出此环境变量.因此,我想我会在我的脚本开头附近设置环境变量.所以我补充说:

$ENV{SERVER}=DEV;

但是,由于严格的subs,我的脚本不允许这样做:

Bareword "DEV" not allowed while "strict subs" in use

我的部门主管一定得到了保证我们必须在我们的脚本中使用strict,所以没有办法克服这个限制.有没有正确的方法来设置我忽略的裸字环境变量?

perl environment-variables bareword

2
推荐指数
1
解决办法
3201
查看次数

尽管我知道匹配在那里,但Perl脚本无法匹配数组中的字符串

我有一个Perl脚本,允许用户使用-p标志在命令行中输入参数列表作为参数.然后,脚本中的子例程循环访问一组较长的参数,并检查它们中的任何一个是否与使用-p标志传入的参数匹配.

由于可以在命令行中输入多个参数,因此字符串将存储在变量中$ARGV{'-p'}(我正在使用Getopt::Euclid).我将此变量转换为数组并将其存储在名为的变量中@parlist.但是,无论我使用什么方法,我似乎永远不会让脚本识别字符串(存储在变量中)和数组元素之间的匹配,即使我打印出两者的内容并看到完全符合我自己.

我的代码:

#parameter being matched as an argument of the subroutine
my $pline = $_[0];

#parameter list as command line argument
my @parlist = @{$ARGV{'-p'}};
print "parlist: @parlist\n";

#extract parameter name from parameter line
$pline =~ /^.*?\._*?(.*)=.*$/;
my $pname = ($1);
print "pname: $pname\n";

#this doesn't find a match
my %p = map {$_ => 1 } @parlist;
if (exists $p{$pname}) {
    print "Found it!\n";
}

#neither does this
my $match = grep …
Run Code Online (Sandbox Code Playgroud)

arrays perl

0
推荐指数
1
解决办法
119
查看次数

标签 统计

perl ×3

arrays ×1

bareword ×1

environment-variables ×1