【发布时间】:2013-09-05 22:24:43
【问题描述】:
我一直对 Perl 执行的常量折叠优化感到好奇,但是当代码涉及 Moose 时,可能不会执行常量折叠(如果我错了,请纠正我)。
我有 Moose 代码,其中包含以下方法:
sub foo {
my ($self) = shift;
my $test_y = $self->pos->[1];
#...
if ($self->is_map_val($self->pos->[0]+8, $test_y+32) ||
$self->is_map_val($self->pos->[0]+32-8, $test_y+32)) {
{
heavy_stuff();
}
#...
}
当我运行 perl -MO=Deparse ./program.pl 时,我得到几乎相同的代码行:
if ($self->is_map_val($self->pos->[0] + 8, $test_y + 32) or
$self->is_map_val($self->pos->[0] + 32 - 8, $test_y + 32))
{
heavy_stuff();
}
我想知道为什么 Perl 没有将 32-8 优化为 24? Perl 没有这样做有什么真正的原因(也许 Moose 子系统让生活变得更艰难?)。
如果有帮助,我会运行 Perl (v.5.14.2)
【问题讨论】:
标签: perl moose internals constantfolding