in reply to Re: "uninitialized value in subroutine exit" warning from CGI.pm
in thread "uninitialized value in subroutine exit" warning from CGI.pm

I don't know what's going on at subroutine exit that would trigger the warning
On subroutine return, any return values are copied. If you return a substr lvalue, this will trigger the uninit warning at this point. For example this warns:
sub f { $_[0] } $a = f(substr(undef,0,1));
This is behaviour I would expect, and I'm not seeing a bug.

Dave.

  • Comment on Re^2: "uninitialized value in subroutine exit" warning from CGI.pm
  • Download Code

Replies are listed 'Best First'.
Re^3: "uninitialized value in subroutine exit" warning from CGI.pm (updated)
by haukex (Archbishop) on Nov 10, 2017 at 15:45 UTC
    On subroutine return, any return values are copied. [emphasis mine]

    D'oh! Thank you for the enlightenment on a Friday afternoon ;-)

    Update: Yep:

    $ perl -wMstrict *a = \substr(undef,0); # alias via glob $b = $a; # copy $a = 'x'; # assignment __END__ Use of uninitialized value in scalar assignment at - line 2. Modification of a read-only value attempted at - line 3.

    And just like above, on Perls <5.16 that dies with "Modification of a read-only value attempted at - line 1." (instead of line 3). So I should probably call the commit I referenced a bugfix! :-)

    Additional updates: Expanded the code example from the original version and added (and edited) the last paragraph.