package Tie::MyBoolean; sub TIESCALAR { my($class, $value ) = @_; my $boolval = ( $value ) ? 1 : 0; return bless \$boolval, $class; } sub STORE { my $self = shift; ${$self} = ( shift ) ? 1 : 0; return ${$self}; } sub FETCH { my $self = shift; return ${$self}; } 1; package main; use strict; use warnings; tie my $bool, 'Tie::MyBoolean'; $bool = 100; print "$bool\n"; $bool = 0; print "$bool\n"; $bool = ! $bool; print "$bool\n";