The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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');