小编cjm*_*cjm的帖子

Perl:将新值重新分配给标量会覆盖RAM中的当前内容吗?

我正在使用Perl进行与安全相关的任务,并且想知道何时发表如下声明:

$test = "new value"

执行,是$test在RAM中覆盖创建的旧值?

如果没有,有没有办法强迫这种情况发生?

variables perl scalar data-persistence

7
推荐指数
2
解决办法
1736
查看次数

如何使用Perl的Archive :: Tar来tar文件大于物理内存的文件?

我正在使用Perl的Archive :: Tar模块.它的问题在于它将所有内容都拉到内存并进行归档,然后写入文件系统,因此可以归档的最大文件大小有限制.大多数时候,它说内存不足.在GNU tar的情况下,它需要文件块,将其存档并将其写入内存,以便它可以处理任何大小的文件.我怎么能用Perl的Archive :: Tar模块做到这一点.

perl tar archive

6
推荐指数
2
解决办法
1717
查看次数

我可以使用unpack将字符串拆分为Perl中的字符吗?

一个常见的'Perlism'生成一个列表,作为以这种形式循环的东西:

for($str=~/./g) { print "the next character from \"$str\"=$_\n"; }

在这种情况下,全局匹配正则表达式从字符串返回一个依次为一个字符的列表,$str并将该值赋给$_

取而代之的是正则表达式,split可以以同样的方式或使用'a'..'z',map等等.

我正在调查unpack通过字符串的字段解释生成字段.我总是发现unpack我的大脑工作方式不太直白,我从来没有真正深入挖掘它.

作为一个简单的例子,我要生成一个列表,是从一个字符串中使用解包中的每个元素的一个字符(是的-我知道我能做到这一点split(//,$str)/./g,但我真的想看看解包可以采用这种方式.. .)

显然,我可以使用字段列表进行解包,unpack("A1" x length($str), $str)但是有没有其他方式看起来像通配?即,我unpack(some_format,$str)可以在列表上下文或循环中调用,以便解压缩将返回格式组中的下一组字符,直到$ str被排除?

我已经阅读了Perl 5.12 Pack podPerl 5.12 pack教程以及Perkmonks教程

以下是示例代码:

#!/usr/bin/perl
use warnings;
use strict;

my $str=join('',('a'..'z', 'A'..'Z')); #the alphabet...  

$str=~s/(.{1,3})/$1 /g;                #...in groups of three
print "str=$str\n\n";

for ($str=~/./g) { 
 print "regex: = $_\n";
}

for(split(//,$str)) …
Run Code Online (Sandbox Code Playgroud)

perl unpack

6
推荐指数
1
解决办法
2844
查看次数

什么,如果有的话,SQL :: Interp优于SQL :: Abstract的缺点?

我目前正在研究一些轻量级的SQL抽象模块.我的工作流程是这样的,我通常手动编写SELECT查询,并通过带有哈希的子进行INSERT/UPDATE查询.

这两个模块似乎都很适合我的需求,我很难决定.SQL :: Interp声称SQL :: Abstract无法在SQL中提供完整的表达能力,但没有讨论其他差异.

它有任何缺点吗?如果是这样,哪个?

sql perl

6
推荐指数
1
解决办法
186
查看次数

使用Perl中的XML :: XPath模块获取节点值

我使用下面的代码从XML文件中获取节点的值:

use XML::XPath;
use XML::XPath::XMLParser;

my $pt1 = XML::XPath->new(filename => 'test1.xml');

my $nodeset = $pt1->find('/file1/table/tname'); 

foreach my $node ($nodeset->get_nodelist) 
{
   print $node->getNodeValue."\n";
}
Run Code Online (Sandbox Code Playgroud)

'test1.xml'的内容如下:

<file1>
    <table>
        <tname>_sys_ident</tname>
        <ttype>regular</ttype>
        <col>
            <name>_sys_ident_asp</name>
            <type>varchar(16)</type>
            <fkey>_sys_asp</fkey>
            <attr>PRIMARY KEY</attr>
        </col>
    </table>
</file1>
Run Code Online (Sandbox Code Playgroud)

我想打印tname的值(即_sys_ident).但上面的代码没有打印任何东西.

如果我在for循环中使用以下内容:

print XML::XPath::XMLParser::as_string($node);
Run Code Online (Sandbox Code Playgroud)

然后,它给出以下输出:

<tname>_sys_ident_asp</tname>
Run Code Online (Sandbox Code Playgroud)

我不想要这个完整的节点名称和值字符串.我只想要节点值. 这是我第一次尝试使用XML和XPath.请告诉我我做错了什么.

xml perl xpath

6
推荐指数
1
解决办法
9678
查看次数

为什么在使用eval之前我需要本地化$ @?

我知道这$@是一个全局变量的事实,我仍然无法弄清楚为什么我需要在使用eval之前对其进行本地化:

例如:

eval { SOME_FUNC_THAT_MAY_DIE(); };
if ($@) {
  print "An error occured!\n";
}
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一可能的事情是,如果某个信号处理程序会die在我尝试阅读的同时调用,$@我在这里缺少什么?

perl eval exception die

6
推荐指数
2
解决办法
402
查看次数

如何将Perl子的返回值转换为arrayref?

我尝试这样的代码:

my @rows = getRows($sth);
$self->stash(rows => \@rows);
Run Code Online (Sandbox Code Playgroud)

getRows是一个子函数名,代码在模板中工作.$ rows是一个数组.

我写这样的代码:

$self->stash(rows => \getRows($sth));
Run Code Online (Sandbox Code Playgroud)

$ rows是REF,这是错误的.

如果写代码如下:

$self->stash(rows => getRows($sth));
Run Code Online (Sandbox Code Playgroud)

$ rows是HASH,这是错的.

有没有办法把两行代码写在一个?

perl mojolicious

6
推荐指数
1
解决办法
291
查看次数

如何覆盖Moose :: Role中的sub?

我正在尝试实现一个Moose :: Role类,其行为类似于Java中的抽象类.我想在Role中实现一些方法,但是能够在具体类中覆盖这些方法.如果我尝试使用与扩展类时相同的样式,我会得到错误Cannot add an override method if a local method is already present.这是一个例子:

我的抽象类:

package AbstractClass;

use Moose::Role;

sub my_ac_sub {

    my $self = shift;

    print "In AbstractClass!\n";
    return;
}

1;
Run Code Online (Sandbox Code Playgroud)

我的具体课程:

package Class;

use Moose;

with 'AbstractClass';

override 'my_ac_sub' => sub {

    my $self = shift;

    super;
    print "In Class!\n";
    return;
};

__PACKAGE__->meta->make_immutable;
1;
Run Code Online (Sandbox Code Playgroud)

然后:

use Class;

my $class = Class->new;
$class->my_ac_sub;
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?我想要完成的是应该以不同的方式完成的吗?我不想做什么?

perl moose

6
推荐指数
1
解决办法
2074
查看次数

如何使用PhantomJS对PDF中的页面进行编号?

我正在使用PhantomJS从HTML生成PDF.我想要一个页面页脚,上面写着"第1页,共5页","第2页,共5页"等.有没有办法用PhantomJS做到这一点?

(我知道基于CSS3页面的计数器,但据我所知,PhantomJS不支持它们.)

pdf-generation footer phantomjs

6
推荐指数
1
解决办法
3821
查看次数

如何从 Raku 命令行获取多个文件名?

这个 Raku 程序按我的预期工作:

sub MAIN($name) { say "Got $name" }
Run Code Online (Sandbox Code Playgroud)

我可以在命令行上传递一个名称:

$ raku m1.raku foo
Got foo
Run Code Online (Sandbox Code Playgroud)

然而,明显的扩展,

sub MAIN(@names) { say "Got $_" for @names }
Run Code Online (Sandbox Code Playgroud)

不起作用:

$ raku mm.raku foo
Usage:
  mm.raku <names>
$ raku mm.raku foo bar
Usage:
  mm.raku <names>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

command-line command-line-arguments raku

6
推荐指数
2
解决办法
153
查看次数