The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;

use Test::More tests => 2;

use lib grep { -d } qw(../lib ./lib);
use Functional::Utility qw(y_combinator);

my $f1;
$f1 = sub {
	my $n = shift;
	return $n if $n == 1;
	return $n * $f1->($n - 1);
};

is( $f1->(6), 720, 'anonymous subs recurse correctly' );

my $factorial = y_combinator {
    my ($recurse) = @_;

    return sub {
        my $n = shift;
        return $n if $n == 1;
        return $n * $recurse->($n - 1);
    };
};

is( $factorial->(6), 720, 'we can recurse correctly, yo' );