Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re: Use of uninitialised value... but it is defined ?!

by AnomalousMonk (Archbishop)
on Mar 02, 2016 at 03:31 UTC ( [id://1156609]=note: print w/replies, xml ) Need Help??


in reply to Use of uninitialised value... but it is defined ?!

In the OPed code, the statement
    BEGIN { say __PACKAGE__."::begin $variable"; }
refers to the lexical  $variable scalar, but the  BEGIN block executes first, after the  $variable is declared, but before it is initialized at run time. Hence, it is uninitialized, but still consistent with strict. Changing the variable name makes this clear:

c:\@Work\Perl\monks>perl -wMstrict -le "use strict; use warnings; use feature 'say'; ;; Foo->test('xxx'); ;; { package Foo; ;; my $variable = 'bar'; ;; BEGIN { say __PACKAGE__ . qq{::begin $vaRRRRiable}; } ;; sub test { say $_[0], $_[1], $variable; } } ;; Foo->test('yyy'); " Global symbol "$vaRRRRiable" requires explicit package name at -e line + 1. BEGIN not safe after errors--compilation aborted at -e line 1.
Changing the scalar name back to  $variable accesses the lexical again, but it's still not initialized at the time the  BEGIN block runs, nor at the first invocation of  Foo->test('xxx'); (but it is initialized by the time  Foo->test('yyy'); runs):
c:\@Work\Perl\monks>perl -wMstrict -le "use strict; use warnings; use feature 'say'; ;; Foo->test('xxx'); ;; { package Foo; ;; my $variable = 'bar'; ;; BEGIN { say __PACKAGE__ . qq{::begin $variable}; } ;; sub test { say $_[0], $_[1], $variable; } } ;; Foo->test('yyy'); " Use of uninitialized value $variable in concatenation (.) or string at + -e line 1. Foo::begin Use of uninitialized value $variable in say at -e line 1. Fooxxx Fooyyybar


Give a man a fish:  <%-{-{-{-<

Replies are listed 'Best First'.
Re^2: Use of uninitialised value... but it is defined ?!
by Discipulus (Canon) on Mar 02, 2016 at 08:19 UTC
      this kind of problems happened to me too ...

      You and me both, brother. And thank you for the compliment.


      Give a man a fish:  <%-{-{-{-<

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1156609]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (1)
As of 2024-04-25 00:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found