Perl bug for use strict - be forewarned!!


T

Tintin

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
 
Ad

Advertisements

G

Gunnar Hjalmarsson

Tintin said:
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
 
P

Peter Makholm

Tintin said:
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
 
R

Ron Bergin

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
 
Ad

Advertisements


Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top