我一直对Perl执行的常量折叠优化感到好奇,但是当代码中有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)