The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package perl5i::2::Signature::Real;
use perl5i::2;

use overload
  q[""] => sub { return $_[0]->as_string },
  fallback => 1
;

method new($class: %args) {
    bless \%args, $class;
}

sub make_real () {}

method __parse_signature {
    my $string = $self->{signature}->trim;
    
    if( $string =~ s{^ (\$\w+) : \s*}{}x ) {
        $self->{invocant} = $1 // '';
    }
    elsif( $self->is_method ) {
        $self->{invocant} = '$self';
    }
    else {
        $self->{invocant} = '';
    }

    my @args = split /\s*,\s*/, $string;

    $self->{params}     = \@args;
    $self->{positional_params} = \@args;
    $self->{num_positional_params} = @args;

    return;
}

method num_positional_params() {
    return $self->{num_positional_params};
}

method positional_params() {
    return $self->{positional_params};
}

method params() {
    return $self->{params};
}

method as_string() {
    return $self->{signature};
}

method invocant() {
    return $self->{invocant};
}

method is_method() {
    return $self->{is_method};
}

1;