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 => 6;
use lib 't/lib';

do {
    package Foo;
    use Moose;
    use MyAttrs (
        has_str => {
            -as     => 'default_str',
            default => '',
        },
        has_str => {
            -as      => 'needs_str',
            required => 1,
        },
    );

    needs_str 'name';
    default_str 'confound';
};

my $name = Foo->meta->get_attribute('name');
my $confound = Foo->meta->get_attribute('confound');

is($name->type_constraint, 'Str', 'needs_str isa has_str');
is($confound->type_constraint, 'Str', 'default_str isa has_str');

ok($name->is_required, 'needs_str: required');
is($confound->default, '', 'default_str: default');

ok(!$confound->is_required, 'default_str: not required');
ok(!$name->has_default, 'needs_str: no default');