print nearest_power_of_2( 50 ); sub nearest_power_of_2 { my $x = shift; my $n = log( $x ) / log( 2 ); return $x if $n == int $n; my ($below, $above) = (int $n, int $n + 1); $_ = 2 ** $_ for ($above, $below); return $above - $x > $x - $below ? $below : $above; }