use strict; use warnings; use Test::More; BEGIN { eval { require MooseX::Role::Parameterized } or plan skip_all => 'This test needs MooseX::Role::Parameterized' } package Foo; use MooseX::Role::Parameterized -traits => 'MooseX::MethodAttributes::Role::Meta::Role'; parameter foo => ( isa => "Str", ); role { my $p = shift; method test_foo => sub { my ($self, $should_be) = @_; package main; is $p->foo, $should_be, 'parameter is correct'; }; }; package UseFoo; use Moose; with Foo => { foo => 23 }; package main; UseFoo->new->test_foo(23); done_testing;