小编Cha*_*ens的帖子

如何创建在不同标量上下文中返回不同值的对象?

我想在字符串上下文和数字上下文中返回不同的值$!.我知道我可以通过wantarray找出我是否在列表或标量上下文中,但是在纯Perl中是否有任何方法来确定我所处的标量上下文?我假设在XS中也有答案,如果在纯Perl中没有办法,我愿意接受这个答案.

perl scalar

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

对于不再在Perl中使用的对象,我该怎么办?

我正在编写一个链接到外部资源的类.其中一种方法是破坏外部资源的删除方法.不应该对该对象进行进一步的方法调用.如果设置了标志,我想在所有方法中设置一个标志和死亡,但是有更好,更简单的方法吗?可能涉及DESTROY的东西?

到目前为止,我真的很喜欢Axeman的建议,但使用AUTOLOAD是因为我懒得重新创建所有方法:

#!/usr/bin/perl

use strict;
use warnings;

my $er = ExternalResource->new;

$er->meth1;
$er->meth2;

$er->delete;

$er->meth1;
$er->meth2;

$er->undelete;

$er->meth1;
$er->meth2;

$er->delete;

$er->meth1;
$er->meth2;
$er->meth3;

package ExternalResource;

use strict;
use warnings;

sub new {
    my $class = shift;
    return bless {}, $class;
}

sub meth1 {
    my $self = shift;
    print "in meth1\n";
}

sub meth2 {
    my $self = shift;
    print "in meth2\n";
}

sub delete {
    my $self = shift;
    $self->{orig_class} = ref $self;
    return bless $self, "ExternalResource::Dead";
}

package …
Run Code Online (Sandbox Code Playgroud)

oop perl design-decisions

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

将目录树复制到命令行中的单个目录

任何人都知道命令行实用程序(或可以作为命令行运行的实用程序)将目录树中的所有.jpg文件收集到单个文件夹,只复制更改的文件?

我开始使用Renamer,它非常适合在当前目录中重命名文件,但是当我试图破坏路径时,它就缩短了.这可能是因为我不太了解Renamer.我最终创建了一个文本文件目录转储,然后使用REGEX查找/替换来创建批处理文件,但这几乎没有效率,也没有自动化.

REGEX:

(G:\ DIR\DIR \)([0-9] + \)([0-9] + \)([0-9] + \)([0-9] + \)(P [O- 9] +.JPG)

改变了这个

G:\ DIR\DIR\00\00\00\00\p0000000000.jpg

对此

G:\ DIR\DIR\p0000000000.jpg

(批处理文件中的副本\ 1\2\3\4\5\6\1\6).

我需要在没有真人登录的情况下将整个事情作为计划任务运行.不是真的在寻找Zip文件,因为我不想打扰系统处理器,而且大多数文件不会每天都在变化.这更像是文件同步.

regex windows command-line file-rename

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

这个琐碎的功能傻了吗?

我今天遇到了一个让我停下来思考的功能.我想不出有这么好的理由:

sub replace_string {
        my $string  = shift;
        my $regex   = shift;
        my $replace = shift;

        $string =~ s/$regex/$replace/gi;

        return $string;
}
Run Code Online (Sandbox Code Playgroud)

我能看到的唯一可能的值是,它使您能够控制替换使用的默认选项,但我认为没有用.看到这个函数后,我的第一反应就是"这是做什么的?".一旦我了解它的作用,我就会假设从那时起就做到了.这意味着如果它发生变化,它将破坏我需要它的任何代码.这意味着该功能可能永远不会改变,或者更改它会破坏大量代码.

现在我想追踪原来的程序员,并在他或她身上打败一些感觉.这是一个有效的愿望,还是我错过了这个功能带来的一些价值?

perl

4
推荐指数
3
解决办法
380
查看次数

如何处理穆斯的模拟角色?

假设我有两个角色:Simple :: Tax和Real :: Tax.在测试情况下,我想使用Simple :: Tax,在生产中,我想使用Real :: Tax.做这个的最好方式是什么?我的第一个想法是使用该new方法的不同版本来创建具有不同角色的对象:

#!/usr/bin/perl

use warnings;

{
    package Simple::Tax;
    use Moose::Role;

    requires 'price';

    sub calculate_tax {
        my $self = shift;
        return int($self->price * 0.05);
    }
}


{
    package A;
    use Moose;
    use Moose::Util qw( apply_all_roles );

    has price => ( is => "rw", isa => 'Int' ); #price in pennies

    sub new_with_simple_tax {
        my $class = shift;
        my $obj = $class->new(@_);
        apply_all_roles( $obj, "Simple::Tax" );
    }
}

my $o = A->new_with_simple_tax(price => …
Run Code Online (Sandbox Code Playgroud)

perl moose

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

是否可以使用变量!= null而不是变量!== undefined && variable!== null?

我有一些代码,其中一个变量可能是undefined,null或正常值.该代码需要做同样的事情,不管变量是否是undefinednull.说话有危险吗?

for (var cur = this.buckets[i]; cur != null; cur = cur.next) {
Run Code Online (Sandbox Code Playgroud)

代替

for (var cur = this.buckets[i]; cur !== undefined && cur !== null; cur = cur.next) {
Run Code Online (Sandbox Code Playgroud)

完整的程序如下(有问题的行在HashTable.prototype.walk).

var hash_seed = Math.floor(Math.random() * 256);

function jenkins_hash(key, interval_size) {
    var hash = hash_seed;
    for (var i=0; i<key.length; ++i) {
        hash += key.charCodeAt(i);
        hash += (hash << 10);
        hash ^= (hash >> 6);
    }
    hash += (hash << 3); …
Run Code Online (Sandbox Code Playgroud)

javascript

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

我在哪里可以获得Perl 4?

我需要测试一些Perl 4代码.它将运行在我目前无法访问的古老(386之前)机器上.我想为OS X编译它,但我找不到CPAN上的源代码(它似乎只回到5.004).

perl

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

为什么我在标量上看到下标的奇怪行为?

看起来好像标量本身就是一个项目的列表:

> "foo"[1]
Index out of range. Is: 1, should be in 0..0
  in block <unit> at <unknown file> line 5

> "foo"[0]
foo
> "foo"[*-1]
foo
Run Code Online (Sandbox Code Playgroud)

我说的是一个列表,因为列表似乎没有索引的范围:

> (0, 1, 2)[3]
Nil
Run Code Online (Sandbox Code Playgroud)

这里发生了什么.我对[]运营商的了解不多.

indexing scalar list range perl6

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

Perl 5 何时获得 Copy-On-Write 字符串?

我知道 Perl 5 现在有 COW 字符串,但我不记得它们是什么时候实现的。

string perl copy-on-write

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

我可以从perl向POS打印机发送ESC d命令吗?

我有一台Star TSP100打印机,我真的遇到了一些问题.

我的问题是我对编程并不熟悉 - 但我正在学习!

程序员参考Star打印机说,如果我将ESC d发送到打印机 - 这将激活内置刀具 - 我非常想做.

我的问题是我不知道如何从Perl中发送这样的转义码 - 如果它甚至可能的话.

我非常感谢你对此提出任何建议.

printing perl

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