我一直对 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
as 24
?Perl 没有这样做有什么真正的原因吗(也许 Moose 子系统让生活变得更艰难?)。
如果有帮助,我运行 Perl (v.5.14.2)