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

use Test::More tests => 10;

use warnings FATAL => 'all';
use strict;

use Function::Parameters {
    fun => 'function',
    method => 'method',
    elrond => {
        attrs => ':lvalue',
    },
};

is eval('use Function::Parameters { fun => { attrs => "nope" } }; 1'), undef;
like $@, qr/nope.*attributes/;

is eval('use Function::Parameters { fun => { attrs => ": in valid {" } }; 1'), undef;
like $@, qr/in valid.*attributes/;

elrond hobbard($ref) { $$ref }
{
    my $x = 1;
    hobbard(\$x) = 'bling';
    is $x, 'bling';

}
$_ = 'fool';
chop hobbard \$_;
is $_, 'foo';

{
    package BatCountry;

    fun join($group, $peer) {
        return "* $peer has joined $group";
    }

    ::is eval('join("left", "right")'), undef;
    ::like $@, qr/Ambiguous.*CORE::/;
}

{
    package CatCountry;

    method join($peer) {
        return "* $peer has joined $self->{name}";
    }

    ::is join('!', 'left', 'right'), 'left!right';

    my $obj = bless {name => 'kittens'};
    ::is $obj->join("twig"), "* twig has joined kittens";
}