Re: Pragmas use strict and use warnings



On Oct 30, 5:24 pm, Je...@xxxxxxxxxxx (Jenda Krynicky) wrote:
On 30 Oct 2007 at 10:22, Paul Lalli wrote:





On Oct 30, 11:15 am, chas.ow...@xxxxxxxxx (Chas. Owens) wrote:
On 10/30/07, Kaushal Shriyan <kaushalshri...@xxxxxxxxx> wrote:
snip> Whats the exact purpose of use strict

snip

The strict pragma has three effects (unless modified by arguments):
1. most variables must be declared (there are some exceptions)

This is a common misperception. use strict 'vars' in fact does not
require anything to be declared. All it requires is that global
variables must be fully qualified. You cannot use the short-name of
globals that belong to the current package.

<snipped>

With strict enabled, the only way to use a short-name of a variable is
to declare a lexical of that name (the right choice) using 'my', or to
disable strict 'vars' on a variable-by-variable case using 'our' (the
wrong choice). This is what leads people to assert "use strict forces
you to declare your variables".

Technicaly you are right, but generally it's better to present use
strict 'vars' as a way to force oneself to declare variables.

I would agree, if the resulting error message was something along the
lines of "Undeclared variable $foo while using strict", but it's not.
The error message is "global variable $foo must be fully qualified
while using strict vars". When a new Perl programmer sees that
message, if all they know about using strict is that it "forces you to
declare your variables", this error message is meaningless, and
frequently leads to the wrong solution. They either fully qualify it,
or they stick an 'our' in front of it.

Tell newbies what 'strict' actually does, and the error message makes
sense, and they know what they did wrong and how to fix it.

Paul Lalli

.



Relevant Pages

  • Re: Pragmas use strict and use warnings
    ... global variables must be fully qualified. ... or to disable strict 'vars' on a variable-by-variable ... assert "use strict forces you to declare your variables". ... if the resulting error message was something along the ...
    (perl.beginners)
  • Re: Recurse over a hash without knowing any elements (except top level)
    ... > I have a hash that is several levels deep. ... You forgot to declare $depth. ... "use strict" would have told you about ... By choosing not to "use strict" you instruct Perl to assume any ...
    (comp.lang.perl)
  • Re: generating number ranges using rand function
    ... not checked by use strict. ... This is not a programmable calculator, ... If you declare all your variables on top of the script, ... Don't use subroutine prototypes. ...
    (perl.beginners)
  • Re: Syntax error
    ... > You should always declare all variables as lexically scoped in the ... With regards to your advice, I am not familiar with the term ... I do "use strict" in all of my normal perl scripts. ... added both the "use strict" and "use warnings" line, ...
    (comp.lang.perl.misc)
  • Re: Pragmas use strict and use warnings
    ... snip> Whats the exact purpose of use strict ... The strict pragma has three effects: ... disable strict 'vars' on a variable-by-variable case using 'our' (the ... you to declare your variables". ...
    (perl.beginners)