小编cjm*_*cjm的帖子

如何访问由XML :: Parser创建的解析树?

我有一个数组引用,其中包含一些数组引用.嵌套数组引用还包含数组引用.(这是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并打印内容.

xml perl

5
推荐指数
1
解决办法
4886
查看次数

为什么附加公共后缀会颠倒en_US语言环境中的归类顺序?

以下代码

#!/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)

c perl locale

5
推荐指数
1
解决办法
259
查看次数

如何使用Test :: DBIx :: Class为测试套件正确加载fixture?

我有一堆测试我的DBIx :: Class架构,我使用的是Test :: DBIx :: Class.这很棒,因为它为我提供了有用的测试功能和加载夹具.它还有一个Test :: mysqld特性,所以我可以动态创建一个测试mysqld实例,部署模式,加载fixture和测试.但是如果我有一堆测试脚本,启动服务器似乎很愚蠢,在每个脚本开始时通过构造函数实例化时部署和加载fixture.

创建测试数据库并在测试期间填充它的最佳方法是什么?

perl unit-testing dbix-class

5
推荐指数
1
解决办法
688
查看次数

在HTML :: Element的look_down例程Perl中指定多个类?

我正在使用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')) 但这不起作用,

先感谢您.

perl for-loop class html-tree

5
推荐指数
1
解决办法
1812
查看次数

Mojo :: DOM - XPath - 问题

为什么Mojo :: DOM开发人员创建自己的选择器而不使用XPath语法?

perl xpath dom mojo

5
推荐指数
1
解决办法
775
查看次数

Date :: Calc - 格式化日期和月份

我想在这里做的就是如果日期或月份是一个数字,在它前面添加一个零.现在它打印出日期为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)

perl date

5
推荐指数
2
解决办法
6733
查看次数

在Android OS上安装Perl模块

是否有在Android上安装Perl模块(如LWP)的选项(在SL4A环境中).此外,是否有可以安装在Android上的预先打包的Perl模块,并且可以选择使用Android Debug Bridge查看安装了哪些模块.

perl android cpan sl4a

5
推荐指数
1
解决办法
3952
查看次数

HTML Treebuilder XPath提取链接

我正在编写一个基本脚本,它只是从网页中提取所有链接.它是用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属性的列表?我相信它不存储价值,而是指向它?

我尝试搜索和阅读示例,但我不知道如何去做.

谢谢.

html perl xpath html-tree

5
推荐指数
1
解决办法
4237
查看次数

获取模块中明确定义的方法/函数列表

在工作单元测试中实现代码覆盖的悲伤状态后,我正在尝试创建一个实用程序,它将扫描我们的代码库并标记没有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对我们来说太过分了.

perl code-coverage

5
推荐指数
1
解决办法
160
查看次数

如何从Perl中的整数列表中获取范围?

我有一系列数字:

@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)

有什么想法吗?当然我尝试使用最常见的"循环",但仍然没有得到它.

arrays perl

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

标签 统计

perl ×10

html-tree ×2

xpath ×2

android ×1

arrays ×1

c ×1

class ×1

code-coverage ×1

cpan ×1

date ×1

dbix-class ×1

dom ×1

for-loop ×1

html ×1

locale ×1

mojo ×1

sl4a ×1

unit-testing ×1

xml ×1