sub Half { my $n = shift; my $SubBody = Power_Of_Two( $n ) ? "return \$_[$[] >> Log2( $n );" : "return int( \$_[$[] / $n );"; my $code = "sub { $SubBody }"; my $sub = eval $code; die "Code '$code' gave error $@" if $@; return $sub; }