in reply to Distinguish between missing and undefined arguments with subroutine signatures

There is nothing like a missing argument with signatures:
#!/usr/bin/perl use warnings; use strict; use experimental 'signatures'; use Syntax::Construct qw{ // }; sub show ($arg) { $arg // 'undef' } use Test::More; use Test::Exception; throws_ok { show() } qr/Too few arguments/; done_testing();
map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

Replies are listed 'Best First'.
Re^2: Distinguish between missing and undefined arguments with subroutine signatures
by jo37 (Curate) on Dec 27, 2020 at 17:41 UTC

    My question was about optional arguments.

    Greetings,
    -jo

    $gryYup$d0ylprbpriprrYpkJl2xyl~rzg??P~5lp2hyl0p$
      Oh, sorry, I didn't get it.

      Why do you need it?

      It seems you don't want an optional argument with a default value, you want a subroutine that knows whether setting the default value was triggered. It's hard to do it with just the optional argument, as it's a single value, but you're interested in two values: the value itself and the boolean telling whether the default value was triggered. Both your solutions introduce such a value (whether it's the scalar @_ or the additional lexical variable). I'm not sure which one I'd prefer, but I'd probably add a comment to both of them.

      map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]