#!/usr/bin/perl package FunkOpera; use overload '&' => sub { my ($l, $r, $f) = @_; bless $f ? sub {&{$r} && &{$l}} : sub {&{$l} && &{$r}} , __PACKAGE__ }, '|' => sub { my ($l, $r, $f) = @_; bless $f ? sub {&{$r} || &{$l}} : sub {&{$l} || &{$r}} , __PACKAGE__ }, '!' => sub { my ($fn) = @_; bless sub { ! &{$fn}}, __PACKAGE__ }; 1;