小编DVK*_*DVK的帖子

3
推荐指数
1
解决办法
1175
查看次数

如何使用Perl XML SAX解析器创建XML :: Simple数据结构?

简介:我正在寻找一个快速的XML解析器(很可能是一些标准SAX解析器的包装器),它将生成与XML :: Simple生成的每个记录数据结构100%相同的每个记录数据结构.

细节:

我们有一个庞大的代码基础结构,它依赖于处理记录,并且希望记录是XML :: Simple生成的格式的数据结构,因为它从早期的侏罗纪时代就一直使用XML :: Simple.

一个简单的XML示例是:

<root>
    <rec><f1>v1</f1><f2>v2</f2></rec>
    <rec><f1>v1b</f1><f2>v2b</f2></rec>
    <rec><f1>v1c</f1><f2>v2c</f2></rec>
</root>
Run Code Online (Sandbox Code Playgroud)

例如粗略的代码是:

sub process_record { my ($obj, $record_hash) = @_; # do_stuff }
my $records = XML::Simple->XMLin(@args)->{root};
foreach my $record (@$records) { $obj->process_record($record) };
Run Code Online (Sandbox Code Playgroud)

众所周知,XML :: Simple很简单.更重要的是,由于是一个DOM解析器并且需要在内存中构建/存储100%的数据,因此它非常慢且内存耗尽.因此,它不是解析包含大量小记录的XML文件的最佳工具.

但是,重写整个代码(包含大量"process_record"类似方法)来使用标准SAX解析器似乎是一项不值得资源的大任务,即使以使用XML :: Simple为代价也是如此.

我正在寻找一个现有的模块,它可能基于一个SAX解析器(或任何快速,内存占用很少),可以用来$record根据上面的图片逐个生成hashrefs,可以传递给$obj->process_record($record)100 %与XML :: Simple的hashrefs相同.

我不在乎新模块的界面是什么; 例如,我是否需要调用next_record()或给它一个接受记录的回调代码.

xml perl parsing dom sax

3
推荐指数
2
解决办法
1046
查看次数

如何在Perl中为mp3文件添加"image"标签

我有一组用于播客的MP3文件,我希望每个人都有一个图像.我看过MP3 :: Tag,但目前尚不清楚如何做到这一点.

podcast perl mp3 image

3
推荐指数
1
解决办法
895
查看次数

是否有像PHP的GeSHi一样的Perl语法荧光笔(输出到HTML)?

大多数PHP开发人员可能熟悉名为" GeSHi " 的语法高亮显示器,它使用HTML和CSS来获取代码,突出显示它:

include('geshi.php');
$source = 'echo "hello, world!";
$language = 'php';
$path = 'geshi/';
$geshi = new GeSHi($source, $language, $path);
echo $geshi->parse_code();
Run Code Online (Sandbox Code Playgroud)

GeSHi支持多种语言.

我想知道,Perl是否有类似的模块?

perl syntax-highlighting

3
推荐指数
1
解决办法
1899
查看次数

需要帮助理解Perl中使用File :: stat的语句

在下面的代码中,语句" $retMode & 0777"和" $retMode & 006"是什么意思?

 use File::stat;  

 my $fpath = "/home/xyz/abc.sh" ;  
 my $info ;  
 my $retMode ;  
 my $property = "File_Permission";  

 $info=stat($fpath) ;  
 if($info){  
     $retMode = $info->mode; # This field contain file mode info  
     $retMode = $retMode & 0777;  
     if(($retMode & 006)) {  
        printf "$property|%03o|$fpath\n",$retMode;  
     }  
 }
Run Code Online (Sandbox Code Playgroud)

perl

3
推荐指数
1
解决办法
298
查看次数

java方法参数可以是声明大小的集合吗?

在java中是否有一种方法可以声明一个方法参数,即某种类型的集合,但是它的大小有限?

例如,类似于:

public Car(String colour, Wheel[4])
Run Code Online (Sandbox Code Playgroud)

建议可以使用颜色和4个轮子来构建汽车.(显然,这个特定的例子可以通过改变方法来实现,通过4个轮子作为单独的参数进行枚举,但是不能缩放)

似乎这些约束应该通过方法头表达,但我不能想到java会如何允许它.

java oop

3
推荐指数
1
解决办法
132
查看次数

JavaScript keyCode - 使用外部键盘布局单击了哪个键

无法找到解决我认为是一个简单问题的方法.

var a = evt.keyCode;用来确定点击了哪个键.

问题是我得到的值是被点击的键的ASCII码而不是被点击的真实字符.

例如,如果用户正在使用法语键盘,则单击该7é,因此不是获取ASCII代码é,而是获得55,这是ASCII代码7.

javascript javascript-events

3
推荐指数
1
解决办法
1444
查看次数

在Perl中使用"index()"vs RegEx进行子字符串搜索的性能差异是什么原因?

我假设可能存在效率差异:

if (index($string, "abc") < -1) {}
Run Code Online (Sandbox Code Playgroud)

if ($string !~ /abc/) {}
Run Code Online (Sandbox Code Playgroud)

有人可以确认这是基于两者如何在Perl中实现(而不是纯基准测试)的情况?

我显然可以猜测两者是如何实现的(基于我将如何在C中编写)但是希望根据实际perl源代码理想地获得更明智的答案.


这是我自己的样本基准:

                          Rate regex.FIND_AT_END    index.FIND_AT_END
regex.FIND_AT_END     639345/s                   --                 -88%
index.FIND_AT_END    5291005/s                 728%                   --
                          Rate regex.NOFIND         index.NOFIND
regex.NOFIND          685260/s                   --                 -88%
index.NOFIND         5515720/s                 705%                   --
                          Rate regex.FIND_AT_START  index.FIND_AT_START
regex.FIND_AT_START   672269/s                   --                 -90%
index.FIND_AT_START  7032349/s                 946%                   --
##############################
use Benchmark qw(:all);

my $count = 10000000;
my $re = qr/abc/o;
my %tests = (
    "NOFIND        " => "cvxcvidgds.sdfpkisd[s"
   ,"FIND_AT_END   " => "cvxcvidgds.sdfpabcd[s"
   ,"FIND_AT_START " => "abccvidgds.sdfpkisd[s"
); …
Run Code Online (Sandbox Code Playgroud)

string perl search

3
推荐指数
1
解决办法
97
查看次数

是否有perl 5.005核心模块可以将纪元秒转换为日期时间字符串?

是否有5.005中的perl核心模块可以将纪元秒转换为可打印的日期时间?

我们的系统有DateTime.pm,但需要该功能的脚本仍然在Perl 5.005上,并且不可能将其升级到5.6+(不要问.由于非技术原因,只能做完).DateTime.pm - 至少我们的版本 - 需要5.6.

因此,我需要以下之一:

  • 理想情况下,Perl 5.005核心中的模块可将时期秒转换为日期/时间字符串.优选地,以YY/MM/DD hh:mm:ss格式但不是必需的.

  • 如果失败了,5.005兼容的非XS模块会将纪元秒转换为日期/时间字符串.优选地,以YY/MM/DD hh:mm:ss格式但不是必需的.

    强烈倾向于在Perl 5.005发布时在CPAN上具有此功能的模块(这种方式似乎是在公司现有的CPAN模块集中)

perl datetime epoch

3
推荐指数
2
解决办法
883
查看次数

在Perl中写入文件时测试错误处理的最简单方法是什么?

我有一个沼泽标准的Perl文件编写代码,具有(希望)适当的错误处理,其类型为:

open(my $fh, ">", "$filename") or die "Could not open file $filname for writing: $!\n";
# Some code to get data to write
print $fh $data  or die "Could not write to file $filname: $!\n";
close $fh  or die "Could not close file $filname afterwriting: $!\n";
# No I can't use File::Slurp, sorry.
Run Code Online (Sandbox Code Playgroud)

(我只是从内存中编写此代码,请原谅任何错别字或错误)

在第一个“ die”行中测试错误处理有些容易(例如,创建一个与您打算编写的名称相同的不可写文件)。

如何在第二行(打印)和第三行(关闭)“ die”行中测试错误处理?

我知道在关闭时引起错误的唯一方法是在写入时文件系统上的空间不足,这很难作为测试。

我更喜欢集成测试类型解决方案,而不是单元测试类型(这将涉及在Perl中模拟IO方法)。

testing perl integration-testing die

3
推荐指数
1
解决办法
76
查看次数