use strict;
use warnings;
print unsigned_shift(-4, 2), "\n";
print signed_shift(-4, 2), "\n";
print unsigned_shift(-4, 2), "\n";
print signed_shift(-4, 2), "\n";
print unsigned_shift(-4, 2), "\n";
print signed_shift(-4, 2), "\n";
sub signed_shift {
use integer;
return $_[0] >> $_[1];
}
sub unsigned_shift {
return $_[0] >> $_[1];
}
####
use Data::Dumper;
use strict;
use warnings;
use overload '>>' => \&singed_shift;
#use overload 'main::>>' => \&singed_shift;
#print Dumper(\%OVERLOAD);
print -4 >> 2;
sub signed_shift {
use integer;
return $_[0] >> $_[1];
}
####
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;