my %sin_d; sub sin_d{ my $d=shift; $sin_d{$d} || ( $sin_d{$d} = sin(PI*$d/180) ); } my %cos_d; sub cos_d{ my $d=shift; $cos_d{$d} || ( $cos_d{$d} = cos(PI*$d/180) ); } .... $xy->[0] += $dist * sin_d($dir); $xy->[1] += $dist * cos_d($dir); ...