Perl bug for use strict - be forewarned!!

Discussion in 'Perl Misc' started by Tintin, Jan 29, 2008.

  1. Tintin

    Tintin Guest

    Hi Folks,

    I am hoping I am wrong here but is this a bug with reference to the
    code segment below?

    ================================================
    #!/usr/local/bin/perl
    use strict;
    use warnings;

    $a=10;


    print $a++ . "\n";
    print $a . "\n";

    ================================================
    After compilation and execution ==>
    10
    11
    ================================================
    Perl version information is as below:
    perl -v

    This is perl, v5.8.8 built for darwin-thread-multi-2level
    (with 10 registered patches, see perl -V for more detail)

    Copyright 1987-2007, Larry Wall

    Binary build 822 [280952] provided by ActiveState http://www.ActiveState.com
    Built Jul 31 2007 19:44:51

    Perl may be copied only under the terms of either the Artistic License
    or the
    GNU General Public License, which may be found in the Perl 5 source
    kit.

    Complete documentation for Perl, including FAQ lists, should be found
    on
    this system using "man perl" or "perldoc perl". If you have access to
    the
    Internet, point your browser at http://www.perl.org/, the Perl Home
    Page.

    $

    ================================================
    The same code is now modified as below:
    #!/usr/local/bin/perl
    use strict;
    use warnings;

    $some_var=10;


    print $some_var++ . "\n";
    print $some_var . "\n";
    ================================================
    After compilation and execution ==>
    10
    11
    ================================================
    Global symbol "$some_var" requires explicit package name
    Global symbol "$some_var" requires explicit package name
    Global symbol "$some_var" requires explicit package name
    Execution aborted due to compilation errors.
    ================================================

    I don't see why this code snipped should've executed in the first
    instance. I have observed this behavior to be exhibited for the
    following single character identifiers ($a, $b) that act as scalar
    variable names.

    Has anybody has had this experience before? Any thoughts?

    Regards,
    - Tintin
    Tintin, Jan 29, 2008
    #1
    1. Advertising

  2. Tintin wrote:
    > I am hoping I am wrong here but is this a bug with reference to the
    > code segment below?
    >
    > ================================================
    > #!/usr/local/bin/perl
    > use strict;
    > use warnings;
    >
    > $a=10;
    >
    >
    > print $a++ . "\n";
    > print $a . "\n";
    >
    > ================================================
    > After compilation and execution ==>
    > 10
    > 11


    <snip>

    $a and $b don't need to be declared under strictures because they are
    special variables.

    http://perldoc.perl.org/perlvar.html#$a

    --
    Gunnar Hjalmarsson
    Email: http://www.gunnar.cc/cgi-bin/contact.pl
    Gunnar Hjalmarsson, Jan 29, 2008
    #2
    1. Advertising

  3. Tintin <> writes:

    > I don't see why this code snipped should've executed in the first
    > instance. I have observed this behavior to be exhibited for the
    > following single character identifiers ($a, $b) that act as scalar
    > variable names.


    This is not a bug but a feature and well documented in the
    documentation for the strict pragma 'perldoc strict':

    Because of their special use by sort(), the variables $a and $b
    are exempted from this check.

    //Makholm
    Peter Makholm, Jan 29, 2008
    #3
  4. Tintin

    Ron Bergin Guest

    On Jan 28, 10:18 pm, Tintin <> wrote:
    > Hi Folks,


    Hi TinTin,

    >
    > I am hoping I am wrong here but is this a bug with reference to the
    > code segment below?
    >
    > ================================================
    > #!/usr/local/bin/perl
    > use strict;
    > use warnings;
    >
    > $a=10;
    >
    > print $a++ . "\n";
    > print $a . "\n";
    >
    > ================================================
    > After compilation and execution ==>
    > 10
    > 11
    > ================================================


    quoted from perldoc perlvar
    $a
    $b Special package variables when using sort(), see "sort" in
    perlfunc. Because of this specialness $a and $b don't need
    to be
    declared (using use vars, or our()) even when using the
    "strict
    'vars'" pragma. Don't lexicalize them with "my $a" or "my
    $b" if
    you want to be able to use them in the sort() comparison
    block
    or function.

    > Perl version information is as below:
    > perl -v
    >
    > This is perl, v5.8.8 built for darwin-thread-multi-2level
    > (with 10 registered patches, see perl -V for more detail)
    >
    > Copyright 1987-2007, Larry Wall
    >
    > Binary build 822 [280952] provided by ActiveStatehttp://www.ActiveState.com
    > Built Jul 31 2007 19:44:51
    >
    > Perl may be copied only under the terms of either the Artistic License
    > or the
    > GNU General Public License, which may be found in the Perl 5 source
    > kit.
    >
    > Complete documentation for Perl, including FAQ lists, should be found
    > on
    > this system using "man perl" or "perldoc perl". If you have access to
    > the
    > Internet, point your browser athttp://www.perl.org/, the Perl Home
    > Page.
    >
    > $
    >
    > ================================================
    > The same code is now modified as below:
    > #!/usr/local/bin/perl
    > use strict;
    > use warnings;
    >
    > $some_var=10;
    >
    > print $some_var++ . "\n";
    > print $some_var . "\n";
    > ================================================
    > After compilation and execution ==>
    > 10
    > 11
    > ================================================

    That's odd. Here's the results I get.

    C:\test>type Tintin2.pl
    #!/usr/local/bin/perl
    use strict;
    use warnings;

    $some_var=10;

    print $some_var++ . "\n";
    print $some_var . "\n";

    C:\test>Tintin2.pl
    Global symbol "$some_var" requires explicit package name at C:\test
    \Tintin2.pl line 5.
    Global symbol "$some_var" requires explicit package name at C:\test
    \Tintin2.pl line 7.
    Global symbol "$some_var" requires explicit package name at C:\test
    \Tintin2.pl line 8.
    Execution of C:\test\Tintin2.pl aborted due to compilation errors.

    > Global symbol "$some_var" requires explicit package name
    > Global symbol "$some_var" requires explicit package name
    > Global symbol "$some_var" requires explicit package name
    > Execution aborted due to compilation errors.
    > ================================================
    >
    > I don't see why this code snipped should've executed in the first
    > instance. I have observed this behavior to be exhibited for the
    > following single character identifiers ($a, $b) that act as scalar
    > variable names.
    >
    > Has anybody has had this experience before? Any thoughts?
    >
    > Regards,
    > - Tintin


    C:\test>perl -v

    This is perl, v5.8.8 built for MSWin32-x86-multi-thread
    (with 33 registered patches, see perl -V for more detail)


    Ron
    aka FishMonger
    Ron Bergin, Jan 29, 2008
    #4
  5. Tintin

    Tintin Guest

    On Jan 29, 1:33 am, Gunnar Hjalmarsson <> wrote:
    > Tintin wrote:
    > > I am hoping I am wrong here but is this a bug with reference to the
    > > code segment below?

    >
    > > ================================================
    > > #!/usr/local/bin/perl
    > > use strict;
    > > use warnings;

    >
    > > $a=10;

    >
    > > print $a++ . "\n";
    > > print $a . "\n";

    >
    > > ================================================
    > > After compilation and execution ==>
    > > 10
    > > 11

    >
    > <snip>
    >
    > $a and $b don't need to be declared under strictures because they are
    > special variables.
    >
    > http://perldoc.perl.org/perlvar.html#$a
    >
    > --
    > Gunnar Hjalmarsson
    > Email:http://www.gunnar.cc/cgi-bin/contact.pl


    Thank You Sir!! I was reading documentation from the camel and I must
    have missed the point. Apologies for the trouble & many thanks for
    your time.
    Tintin, Jan 29, 2008
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Ben Edwards
    Replies:
    2
    Views:
    91
    James Edward Gray II
    Jul 13, 2007
  2. H. Wade Minter
    Replies:
    8
    Views:
    292
    Robin
    Apr 25, 2004
  3. Franck
    Replies:
    4
    Views:
    127
    thundergnat
    Jun 15, 2004
  4. Martina

    why is important to use : use strict?

    Martina, Sep 19, 2005, in forum: Perl Misc
    Replies:
    6
    Views:
    99
    Jürgen Exner
    Sep 20, 2005
  5. Ting Wang
    Replies:
    5
    Views:
    173
    John Bokma
    Oct 6, 2005
Loading...

Share This Page