#!/usr/bin/perl use strict; use warnings; package Scalar; use Carp; use overload q(bool) => sub { carp q(bool); return !!${$_[0]} }, q("") => sub { carp q(""); return ${$_[0]} . "" }, q(0+) => sub { carp q(0+); return ${$_[0]} + 0 }, fallback => 1; sub new { my $class = shift; my $val = shift; bless \$val, $class; } 1; package main; local $\ = "\n"; my $t = Scalar->new(1); my $f = Scalar->new(0); print 'true' if $t; print 'false' if $f; print 'and' if $f && $t; print 'or' if $f || $t; print $f + $t; print $f . $t;