我想在字符串上下文和数字上下文中返回不同的值$!.我知道我可以通过wantarray找出我是否在列表或标量上下文中,但是在纯Perl中是否有任何方法来确定我所处的标量上下文?我假设在XS中也有答案,如果在纯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) 任何人都知道命令行实用程序(或可以作为命令行运行的实用程序)将目录树中的所有.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文件,因为我不想打扰系统处理器,而且大多数文件不会每天都在变化.这更像是文件同步.
我今天遇到了一个让我停下来思考的功能.我想不出有这么好的理由:
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)
我能看到的唯一可能的值是,它使您能够控制替换使用的默认选项,但我认为没有用.看到这个函数后,我的第一反应就是"这是做什么的?".一旦我了解它的作用,我就会假设从那时起就做到了.这意味着如果它发生变化,它将破坏我需要它的任何代码.这意味着该功能可能永远不会改变,或者更改它会破坏大量代码.
现在我想追踪原来的程序员,并在他或她身上打败一些感觉.这是一个有效的愿望,还是我错过了这个功能带来的一些价值?
假设我有两个角色: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) 我有一些代码,其中一个变量可能是undefined,null或正常值.该代码需要做同样的事情,不管变量是否是undefined或null.说话有危险吗?
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) 我需要测试一些Perl 4代码.它将运行在我目前无法访问的古老(386之前)机器上.我想为OS X编译它,但我找不到CPAN上的源代码(它似乎只回到5.004).
看起来好像标量本身就是一个项目的列表:
> "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)
这里发生了什么.我对[]运营商的了解不多.
我知道 Perl 5 现在有 COW 字符串,但我不记得它们是什么时候实现的。
我有一台Star TSP100打印机,我真的遇到了一些问题.
我的问题是我对编程并不熟悉 - 但我正在学习!
程序员参考Star打印机说,如果我将ESC d发送到打印机 - 这将激活内置刀具 - 我非常想做.
我的问题是我不知道如何从Perl中发送这样的转义码 - 如果它甚至可能的话.
我非常感谢你对此提出任何建议.
perl ×7
scalar ×2
command-line ×1
file-rename ×1
indexing ×1
javascript ×1
list ×1
moose ×1
oop ×1
perl6 ×1
printing ×1
range ×1
regex ×1
string ×1
windows ×1