package Number; use strict; use warnings; use overload '>>' => \&signed_shift; sub new { my $self; $self->{"number"} = $_[1]; bless $self; return $self; } sub signed_shift { my ($self, $n) = @_; use integer; return ($self->{"number"} >> $n); } 1; use Data::Dumper; use Number; use strict; use warnings; my $n = new Number(-4); print $n >> 2;