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脚本,我需要在OS上设置一个环境变量来指向我们的开发服务器:
export SERVER=DEV
但是,一旦将脚本分发给我们的用户,我不希望他们每次都需要导出此环境变量.因此,我想我会在我的脚本开头附近设置环境变量.所以我补充说:
$ENV{SERVER}=DEV;
但是,由于严格的subs,我的脚本不允许这样做:
Bareword "DEV" not allowed while "strict subs" in use
我的部门主管一定得到了保证我们必须在我们的脚本中使用strict,所以没有办法克服这个限制.有没有正确的方法来设置我忽略的裸字环境变量?
我有一个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)