use strict; use warnings; use Test::More 'no_plan'; sub fun :lvalue { return my $sv; } sub X { "what?" } sub handle_fun { my ($usepack, $use, $inpack, $name, $proto) = @_; my $XX = sub (&) { my $cr = $_[0]; return sub { return join(': ', $proto, $cr->()); }; }; return (undef, $XX); } use Devel::Declare; use Devel::Declare fun => [ DECLARE_PROTO, \&handle_fun ]; my $foo = fun ($a, $b) { "woot" }; is($foo->(), '$a, $b: woot', 'proto declarator ok'); is(X(), 'what?', 'X sub restored ok');