我有一个数组引用,其中包含一些数组引用.嵌套数组引用还包含数组引用.(这是XML :: Parser的树样式.)
my $Filename = "sample.xml";
my $Parser = new XML::Parser( Style => 'tree' );
my $Tree = $Parser->parsefile( $Filename );
Run Code Online (Sandbox Code Playgroud)
这里$Tree是数组引用它将是数组引用,内容和嵌套深度都取决于xml文件.我想遍历嵌套数组$Tree并打印内容.
以下代码
#!/usr/bin/perl
use strict;
use warnings;
my $s1 = 'aaa2000@yahoo.com';
my $s2 = 'aaa_2000@yahoo.com';
my $s3 = 'aaa2000';
my $s4 = 'aaa_2000';
no locale;
print "\nNO Locale:\n\n";
if ($s1 gt $s2) {print "$s1 is > $s2\n";}
if ($s1 lt $s2) {print "$s1 is < $s2\n";}
if ($s1 eq $s2) {print "$s1 is = $s2\n";}
if ($s3 gt $s4) {print "$s3 is > $s4\n";}
if ($s3 lt $s4) {print "$s3 is < $s4\n";}
if ($s3 eq $s4) {print "$s3 is = …Run Code Online (Sandbox Code Playgroud) 我有一堆测试我的DBIx :: Class架构,我使用的是Test :: DBIx :: Class.这很棒,因为它为我提供了有用的测试功能和加载夹具.它还有一个Test :: mysqld特性,所以我可以动态创建一个测试mysqld实例,部署模式,加载fixture和测试.但是如果我有一堆测试脚本,启动服务器似乎很愚蠢,在每个脚本开始时通过构造函数实例化时部署和加载fixture.
创建测试数据库并在测试期间填充它的最佳方法是什么?
我正在使用HTML :: TreeBuilder来解析一些HTML.
你能在' look_down '例程中指定多个类吗?
在使用以下方式搜索HTML时的情况 -
for ( $tree->look_down( 'class' => 'postbody'))
Run Code Online (Sandbox Code Playgroud)
我也是'postprofile'在同一个循环中搜索另一个类.
有没有办法这样做而不必使用新的 - for ( $tree->look_down( 'class' => 'postprofile' ))
因为这会带回2组结果,而我只想要一个合并集.
我尝试过使用 - for ( $tree->look_down( 'class' => 'postbody||postprofile'))
但这不起作用,
先感谢您.
为什么Mojo :: DOM开发人员创建自己的选择器而不使用XPath语法?
我想在这里做的就是如果日期或月份是一个数字,在它前面添加一个零.现在它打印出日期为201188,我正在寻找20110808.
#!/usr/bin/perl
use Date::Calc qw(Add_Delta_Days);
my (undef, undef, undef, $day, $month, $year) = localtime();
$year +=1900;
$month +=1;
($year, $month, $day ) = Add_Delta_Days($year, $month, $day, -3)
if ($month =~ /\d{1}/){
s/$month/0$month/
}
if ($day =~/\d{1}/){
s/$day/0$day/
}
print $year,$month,$day;
Run Code Online (Sandbox Code Playgroud) 是否有在Android上安装Perl模块(如LWP)的选项(在SL4A环境中).此外,是否有可以安装在Android上的预先打包的Perl模块,并且可以选择使用Android Debug Bridge查看安装了哪些模块.
我正在编写一个基本脚本,它只是从网页中提取所有链接.它是用Perl编写的,并使用WWW :: Mechanize和HTML :: Treebuilder :: Xpath模块,这两个模块都是通过CPAN安装的.
我知道只使用WWW :: Mechanize就可以轻松完成,但是我也想学习使用XPath.
因此,脚本将解析整个网页,并检查每个锚标记的href属性,提取链接并将其打印到控制台/将其写入文件.请注意,在下面的脚本中,我没有使用use strict,因为我只是写这篇文章来澄清和理解使用XPath遍历HTML树的概念.
这是脚本:
#! /usr/bin/perl
use WWW::Mechanize;
use HTML::TreeBuilder::XPath;
use warnings;
$url="https://example.com";
$mech=WWW::Mechanize->new();
$mech->get($url);
$tree=HTML::TreeBuilder::XPath->new();
$tree->parse($mech->content);
$nodes=$tree->findnodes(q{'//a'}); # line is modified later.
foreach $node($nodes)
{
print $node->attr('href');
}
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误:
Can't locate object method "attr" via package "XML::XPathEngine::Literal" at pagegetter.pl line 23.
Run Code Online (Sandbox Code Playgroud)
我修改了脚本如下:
$nodes=$tree->findnodes(q{'//a/@href'});
while($node=$nodes->shift)
{
print $node->attr('href');
}
Run Code Online (Sandbox Code Playgroud)
错误:
Can't locate object method "shift" via package "XML::XPathEngine::Literal"
Run Code Online (Sandbox Code Playgroud)
我不确定,如何打印href属性的值.
$ nodes应该包含所有href属性的列表?我相信它不存储价值,而是指向它?
我尝试搜索和阅读示例,但我不知道如何去做.
谢谢.
在工作单元测试中实现代码覆盖的悲伤状态后,我正在尝试创建一个实用程序,它将扫描我们的代码库并标记没有100%的文件.我找到了两种获得所有方法的方法:
直接访问符号表:
for my $classname ( @ARGV ) {
eval "require $classname";
die "Can't load $classname $EVAL_ERROR"
if $EVAL_ERROR;
no strict 'refs';
METHODS:
for my $sym ( keys %{ "${classname}::" } ) {
next METHODS unless defined &{"${classname}::${sym}"};
print "$sym\n";
}
}
Run Code Online (Sandbox Code Playgroud)
使用Class::InspectorCPAN中的模块:
for my $classname ( @ARGV ) {
my @methods = Class::Inspector->methods($classname, 'public');
print Dumper \@methods;
}
Run Code Online (Sandbox Code Playgroud)
这两种方法产生了类似的结果; 这些问题是它们显示了整个模块可用的所有方法,而不仅仅是该模块内部定义的方法.
有没有办法区分模块可访问的方法和模块内部明确定义的方法?
注意:我没有尝试创建完整的代码覆盖率测试,对于我的用例,我只想测试所有方法至少被调用过一次.完整的覆盖测试Devel::Cover对我们来说太过分了.
我有一系列数字:
@numbers = 1,2,3,6,8,9,11,12,13,14,15,20
Run Code Online (Sandbox Code Playgroud)
我想以这种方式打印它:
1-3,6,8-9,11-15,20
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?当然我尝试使用最常见的"循环",但仍然没有得到它.