in reply to Re^2: Contents of @_ using subroutine signatures with default values (flag)
in thread Contents of @_ using subroutine signatures with default values

The simplified answer: no, it's not that simple. If @_ isn't populated, then the signature code gets its arguments directly from the stack. If @_ gets populated, then the stack and @_ can get out of sync, e.g. by code within the signature which manipulates @_. So in that case the code must get its args from @_ rather than from the stack. So there have to be two code paths for everything.

See this p5p post for more details.

Dave.

  • Comment on Re^3: Contents of @_ using subroutine signatures with default values (flag)

Replies are listed 'Best First'.
Re^4: Contents of @_ using subroutine signatures with default values (flag)
by LanX (Saint) on Jul 14, 2020 at 10:21 UTC
    > See this p5p post for more details.

    Thanks Dave, I will.

    ... this will be a longer read this evening. OO

    On a side note: I was fascinated to learn (rediscover ?), that a call &sub without arguments has full access to the callers @_.

    use strict; use warnings; use Data::Dump qw/pp dd/; sub foo { warn pp \@_; push @_,@_+1 } sub tst { &foo; &foo; &foo; warn pp \@_; } tst(1);

    -*- mode: compilation; default-directory: "d:/exp/" -*- Compilation started at Tue Jul 14 12:21:10 C:/Perl_524/bin\perl.exe -w d:/exp/access_@_.pl [1] at d:/exp/access_@_.pl line 7. [1, 2] at d:/exp/access_@_.pl line 7. [1, 2, 3] at d:/exp/access_@_.pl line 7. [1 .. 4] at d:/exp/access_@_.pl line 15. Compilation finished at Tue Jul 14 12:21:10

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery