http://www.perlmonks.org?node_id=988756


in reply to Re: Looking for pointers or optimizations.
in thread Looking for pointers or optimizations.

Please correct me if I am wrong (sometimes I am) but I think that no warnings; works for the -w switch too. I was asking myself the same question a while ago. Try this:

#!/usr/bin/perl5.10 -w my %hash1 = { test1 => 'test1', test2 => 'test2' }; no warnings; my %hash2 = { test1 => 'test1', test2 => 'test2' }; use warnings; my %hash3 = { test1 => 'test1', test2 => 'test2' };

I get:

Reference found where even-sized list expected at ./test_warnings.pl l +ine 3. Reference found where even-sized list expected at ./test_warnings.pl l +ine 15.

Now the question is, what is the difference if any between the -w switch and use warnings;?

Update: Answering myself, on perldoc it says: The warnings pragma is a replacement for the command line flag -w , but the pragma is limited to the enclosing block, while the flag is global.

Take my advice. I don't use it anyway.

Replies are listed 'Best First'.
Re^3: Looking for pointers or optimizations.
by hbm (Hermit) on Aug 21, 2012 at 15:59 UTC

    I very recently encountered a spurious(?) error message (on v5.8.2):

    Use of uninitialized value in substitution (s///) at (eval 2) line 21

    Which resulted from the addition of one line like this:

    $hash{$var1}{'string'} = $var2;

    I confirmed that the variables were defined, and that the hash entry was created. I then tried:

    { no warnings 'uninitialized'; # and later: no warnings; $hash{$var1}{'string'} = $var2; }

    To no avail. Curiously, the error wasn't occurring at that line (confirmed with print statements); but it disappeared if I commented out that line.

    Removing -w got rid of the error.