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 がそうしなかった本当の理由はありますか?
役に立ったら、Perl (v.5.14.2) を実行します。