#!/usr/bin/perl use strict; use warnings; use Test::More tests => 3; use Test::Exception; BEGIN { use_ok('Moose::Autobox'); } use Moose::Autobox; # we need a control in the experiment sub fact { my $n = shift; return 1 if $n < 2; return $n * fact($n - 1); } *fact2 = sub { my $f = shift; sub { my $n = shift; return 1 if $n < 2; return $n * $f->($n - 1); } }->y; *fact3 = sub { my $f = shift; sub { my $n = shift; return 1 if $n < 2; return $n * ($f->($f))->($n - 1); } }->u; is(fact(10), fact2(10), '... our factorials match'); is(fact(10), fact3()->(10), '... our factorials match');