Brute-force algorithm: sub is_power { # Some algorithm to determine if a number is a power of two. } sub closest_power_of_two_brute { my $m = my $n = shift; return $n if is_power( $n, 2 ); while (1) { return $n if is_power( $++n, 2 ); return $m if is_power( $--m, 2 ); } }