package Demo; require v5.6.1; use Attribute::Handlers::Prospective; sub UNIVERSAL::curry : ATTR(CODE,RAWDATA) { my ($package, $symbol, $referent, $attr, $data, $phase) = @_; my $num = () = $data =~ /(\$)/g; my $subname = "$package".'::'.*{$symbol}{NAME}; *$subname = sub { if (@_ < $num) { my @x = @_; return sub { $subname->(@x, @_ ) }; } $referent->(@_); }; } 1; __END__