小编dar*_*rch的帖子

如何在Moose中自动生成绑定到网络服务的一堆setter/getter?

通过自学Moose的方式,我正在研究一个与特定硬件接口的Moose对象.所述硬件采用许多不同的命令来设置硬件的各种属性,设置PROPERTYNAME=VALUE器的所有形式以及PROPERTYNAME?吸气器(注意这些"设置器"和"吸气器"在硬件的网络接口上).我想要做的是创建一个对象,其中硬件的所有这些属性都使用类似属性的接口实现.由于获取和设置各种属性对所有属性采用相同的形式,是否有办法从这些属性的列表中自动生成setter和getter?

IE:而不是这个:

Package MyHardware;
use Moose;
has property1 => (
    'is' => 'rw',
    'reader' => 'set_property1',
    'writer' => 'get_property1',
);

has property2 => (
    'is' => 'rw',
    'reader' => 'set_property2',
    'writer' => 'get_property2',
);

# ...

has propertyN => (
    'is' => 'rw',
    'reader' => 'set_propertyN',
    'writer' => 'get_propertyN',
);
Run Code Online (Sandbox Code Playgroud)

有什么我可以这样做:

Package MyHardware;
use Moose;

attributes => (
    'is' => 'rw',
    'names' => [qw/property1 property2 ... propertyN/],
    'reader' => sub {
        my $self = shift;
        my …
Run Code Online (Sandbox Code Playgroud)

perl moose

4
推荐指数
2
解决办法
1134
查看次数

如果脚本在Windows上运行,我如何确保加载模块?

我有一个需要在Windows和Linux上运行的Perl脚本.问题是我需要use一个仅适用于Windows的Perl模块.

我试过下面的,但它仍然包括你的WindowsStuff包.

use strict;
if ($^O eq 'MSWin32' ){
    use My::WindowsStuff;
}
use File::Basename;
use Getopt::Long;
...
...
Run Code Online (Sandbox Code Playgroud)

linux windows perl module perl-module

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

在Perl中覆盖die并仍在Windows上返回正确的退出代码

在Windows上,我想只在脚本死亡时执行某些操作.下面的块没有帮助; 我认为这是因为Windows不支持信号.

$SIG{__DIE__} = sub {
    qx(taskkill /F /IM telnet.exe);
    CORE::die @_;
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试了这个:

END {
    qx(taskkill /F /IM telnet.exe);
    exit $exit_code;
}
Run Code Online (Sandbox Code Playgroud)

它执行了taskkill,但退出了退出代码0.我需要传播,exit_code因为我们基于它进行进一步处理.

perl

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

如何在字符串中包含字符串的所有数字子字符串?

我想转换一个字符串,以便所有数字子序列都包含在{... }对中.

例如:

input_string = "APPL[E]5XXXX"

output_string = "APPL[E]{5}XXXX"
Run Code Online (Sandbox Code Playgroud)

例如,每个字符串可以包含一个或多个数字,BASIC76XXXXX98ZZZZ输出应该是BASIC{76}XXXXX{98}zzzz

不确定这是否可能实现.任何帮助将非常感谢.

regex perl

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

为什么我不能通过typeglob访问词法变量?

我不明白为什么下面的例子失败了(测试2).为什么我无法从*bb glob访问变量bb?

use Test::More tests => 4;

$aa = 1;
my $bb = 2;   # HERE!
local $cc = 3;
our $dd = 4;

is(${*aa}, 1, "$ \*aa should be 1");
is(${*bb}, 2, "$ \*bb (my) should be 2");
is(${*cc}, 3, "$ \*cc (local) should be 3");
is(${*dd}, 4, "$ \*dd (our) should be 4");
Run Code Online (Sandbox Code Playgroud)

输出是

1..4
ok 1 - *aa should be 1
#   Failed test '*bb (my) should be 2'
#   at untitled line 10.
#          got: undef …
Run Code Online (Sandbox Code Playgroud)

perl

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

如何巧妙地调用名称在字符串中的方法?

在Perl 5中,我可以说

my $meth = 'halt_and_catch_fire';
my $result = $obj->$meth();
Run Code Online (Sandbox Code Playgroud)

这对于迭代方法名称列表来执行操作非常方便.我已经设法搞清楚在Perl 6中我不能只说

my $result = $obj.$meth();
Run Code Online (Sandbox Code Playgroud)

有一件事的工作

my $result = $obj.^can($meth)[0]($obj);
Run Code Online (Sandbox Code Playgroud)

但这似乎完全可怕.我该怎么办呢?

perl6 raku

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

我怎么知道几周前的日期是什么?

我试图根据我想要回去的周数来确定计算上一个日期的好方法.今天是2011年7月19日,所以如果我想回到5周,那么确定那个日期的最佳方法是什么?

perl date

2
推荐指数
1
解决办法
3864
查看次数

为什么我的Perl脚本不能区分"0"和"""`?

Perl noob在这里 - 我有以下脚本

if(substr($pc, 3,1)!=" "){
       $newpc = substr($pc, 0, 4) . " " . substr($pc, 4);
}
Run Code Online (Sandbox Code Playgroud)

它被设计为在邮政编码中放置一个空格,例如NN141NJ变成NN14 1NJ......但是对于NN102DE它没有做任何事情的邮政编码,Perl是否识别" "并且"0"同样如此?0作为第四个字母,我怎样才能使用perl而不是忽略字符串?

perl replace substr

2
推荐指数
1
解决办法
120
查看次数

如何从其子程序之一获取Perl模块的名称?

假设我有一个Perl模块My::Module:

package My::Module;

sub foo {
   return $module_name;
}
Run Code Online (Sandbox Code Playgroud)

我会怎么替换$module_name用得到My::Module

perl perl-module

2
推荐指数
1
解决办法
144
查看次数

如何测试方法计算出正确的结果?

这听起来比我的意思更模糊,但是在类中测试方法时正确的过程是什么。

例如,客户类将设置密码的 md5 哈希值保存到数据库,而不是实际密码。客户类中的私有方法计算出要保存的 md5 哈希值。

public class Customer() {

public void setPassword(String password){
  this.password = hashPassword(password);
}

private String hashPassword(String password){
  ..do stuff..
}

.. other methods ..

}
Run Code Online (Sandbox Code Playgroud)

现在这只是一个例子,我不想知道如何计算 md5 哈希值等。这是关于测试的。这是我能想到的选择:

  • 我在测试类中创建一个与 hashPassword 执行相同操作的方法,然后比较结果。
  • 我手动计算特定密码 (myPassword) 的结果并将其存储为常量。在测试中将密码设置为 myPassword 后,我会将常量与结果进行比较。

java testing

2
推荐指数
1
解决办法
109
查看次数

标签 统计

perl ×8

perl-module ×2

date ×1

java ×1

linux ×1

module ×1

moose ×1

perl6 ×1

raku ×1

regex ×1

replace ×1

substr ×1

testing ×1

windows ×1