我需要Moose中的class属性.现在我说:
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
use MooseX::Declare;
class User {
has id => (isa => "Str", is => 'ro', builder => '_get_id');
has name => (isa => "Str", is => 'ro');
has balance => (isa => "Num", is => 'rw', default => 0);
#FIXME: this should use a database
method _get_id {
state $id = 0; #I would like this to be a class attribute
return $id++;
}
}
my @users;
for my $name (qw/alice bob charlie/) …Run Code Online (Sandbox Code Playgroud) 我似乎记得,相信之后的价值是不安全$@的eval.关于信号处理程序$@在你看到它之前有机会设置的东西.我现在也太累了,懒得追查真正的原因.那么,为什么信任不安全$@呢?
perldoc perl5150delta 说:
$$ can be assigned to
$$ was made read?only in Perl 5.8.0. But only sometimes: "local $$"
would make it writable again. Some CPAN modules were using "local $$"
or XS code to bypass the read?only check, so there is no reason to keep
$$ read?only. (This change also allowed a bug to be fixed while
maintaining backward compatibility.)
Run Code Online (Sandbox Code Playgroud)
$$ 是当前的进程ID,为什么你会分配给它?
我有一个由第三方生成的PDF.我试图从中获取文本,但是pdf2text复制和粘贴都不会产生可读文本.在对输出(两个中的任何一个)进行一点挖掘之后,我发现屏幕上的每个字符都由三个字节组成.例如,"A"是字节ef,81和81.查看PDF上的元数据,它声称在Identity-H中编码,所以我假设我看到的是一组用Identity-H编码的字符.我有一个基于我已经拥有的文档的部分映射,但我想做一个更完整的映射.要做到这一点,我需要像Identity-H的ASCII表.
如果Perl 5中的字符串通过looks_like_number,它也可能是一个数字.例如,
my $s = "10" + 5;
Run Code Online (Sandbox Code Playgroud)
结果$s被分配15.
是否有任何情况下字符串的行为与其数字等价物不同?
我想测试是否会只发生在特定的条件perl有一个malloc是失败,因为那里是没有的记忆里留下来.我想perl尽快死去.我认为禁食的方式是创建一些巨大的数组
perl -le '$_->[100_000_000_000] = 1 for \(@a, @b, @c, @d); <>'
但是在我的交换达到5演出之后我不得不杀掉它而没有停止的迹象(我在OS X 10.6上).
我刚刚在Linux上进行了测试,它很快就死了:
time perl -le '$_->[1_000_000_000] = 1 for \(@a, @b, @c, @d); <>'
Out of memory!
real 0m0.023s
user 0m0.012s
sys 0m0.008s
Run Code Online (Sandbox Code Playgroud)
所以问题似乎是OS X及其问题dynamic_pager.
我只是试图禁止dynamic_pager使用
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
Run Code Online (Sandbox Code Playgroud)
并重新启动,但机器完全挂起.我的下一次尝试是更改com.apple.dynamic_pager.plist配置文件以将vm文件写入一个非常小的分区.
我刚看到代码看起来像这样:
if (foo == "bar"){}else{
}
Run Code Online (Sandbox Code Playgroud)
是否有充分的理由让某人以这种方式写作而不是
if (foo != "bar") {
}
Run Code Online (Sandbox Code Playgroud)
或者我只是在处理一个狂热的疯子(这是我基于代码中其他事情的假设).
这段代码就像我期望的那样死掉:
use strict;
use warnings;
open my $fh, "<", "" or die $!;
Run Code Online (Sandbox Code Playgroud)
但这不是:
use strict;
use warnings;
open my $fh, "<", undef or die $!;
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
当Perl 5.8.1问世时,它添加了散列随机化.当Perl 5.8.2出来时,我想,除非存在环境变量(PERL_HASH_SEED),否则它会删除哈希随机化.现在好像我被严重误认为
PERL_HASH_SEED=$SEED perl -MData::Dumper -e 'print Dumper{map{$_,1}"a".."z"}'
Run Code Online (Sandbox Code Playgroud)
无论价值如何,始终都会重新启动相同的密钥排序$SEED.
哈希随机化完全消失了,我做错了什么,或者这是一个错误?
我试图在Perl 5.8.2及更高版本中触发哈希随机化功能.要做到这一点,我需要一组病态的,但随机化功能.我试过用MJD's code,但那没用.而且,现在我看着它,我不应该感到惊讶.它来自1997年,从那时起我们就改变了哈希函数.
有谁知道一组病理键,或者如何生成它们?我想我应该去看哈希函数并反向设计解决方案,但我很懒.