use constant NUM_BITS = $Config{ivsize} * 8; use constant SIGN_BIT = 1 << ( NUM_BITS - 1 ); use constant ALL_BITS = -1; sub sr_signed { my ($p, $q) = @_; if ($p & SIGN_BIT) { return ($p >> $q) | ($ALL_BITS << (NUM_BITS - $q)); } else { return $p >> $q; } }