in reply to use of strict ....

You declared (or whatever use utils did) a hash called %ERRORS.

Yet later in the code, though you would like to get value of key CRITICAL of that hash, you used name ERRORS in this way and didn't know about it:

{"CRITICAL"} is resolved as a block that returns value of its last expression, i.e. string "CRITICAL"; this value is considered to be a class name, and ERRORS as a method from this class; so, you're calling method ERRORS of class CIRITCAL, what would be rewritten like CRITICAL->ERRORS();.

Hope this haven't confused you too much :-)

Perl on.

Replies are listed 'Best First'.
Re^2: use of strict ....
by perlknight (Pilgrim) on Nov 05, 2006 at 16:01 UTC
    Than why would it work if I took the "use strict" pragma out? BTW, it's a typal, it should be "CRITICAL". I took a look at utils.pm, it's a hash, not a method. To clarify, you saying I should use single qoute:
    exit $ERRORS{'CRITICAL'};
    instead of double qoute:
    exit $ERRORS{"CRITICAL"};
    because it intrepret the double qoute as:
    $CRITICAL->ERRORS();
      It doesn't matter if you use single, double, or no quotes. any of these are fine.
      $ERRORS{CRITICAL} $ERRORS{'CRITICAL'} $ERRORS{"CRITICAL"}

      The error was that you forgot the '$', so perl was treating ERRORS as a subroutine invocation, and passing the hashref {"CRITICAL" => undef} as the argument.

      You can verify that behaviour like this:

      use Data::Dumper; sub ERRORS { print "ERRORS called\n"; print Dumper(\@_); } $a = ERRORS{"CRITICAL"};
      Which outputs:
      ERRORS called $VAR1 = [ { 'CRITICAL' => undef } ];
      By the way - in the future instead of saying "strict will puke" it would be better to provide the error.