package Foo; use lib 'lib'; use Moose; use MooseX::Sub::Arguments; sub bar { use args q($x, ArrayRef @z, Str $y?); output(x => $x); output(y => $y); output(z => @z); output(self => $self); output(class => $class); } sub baz { use args; print "CLASS $class\n" } sub qux { use args q($foo, @bar, %baz, *%rest), -named => 1; print "[ foo $foo | bar(@bar) | baz $baz{x} ]\n"; print "[ qux $rest{qux} ]\n"; } # doesn't care if rest is hash or array sub pos_tail_named { use args q($foo, *%bar); print "$foo -> $bar{baz}, $bar{qux}\n"; } # function means neither $class nor $self sub output { use args q($name, *@message), -function => 1; printf "%-6s %s\n", $name . ':', join ', ', @message; } sub hr { use args -function => 1; print '-' x 15, "\n"; } # no $self, only $class sub creat0r { use args -class => 1; print "creat0red!\n"; return $class->new; } my $foo = Foo->creat0r; hr; $foo->bar(1, [1 .. 4], 'Fnord'); hr; $foo->baz; hr; $foo->qux( foo => 23, bar => [17, 13], baz => {x => 777}, qux => 333, ); hr; $foo->pos_tail_named('fnord', baz => 8, qux => 9); 1;