#!./perl
BEGIN {
chdir
't'
if
-d
't'
;
@INC
=
'../lib'
;
$ENV
{PERL5LIB} =
'../lib'
;
}
$| = 1;
print
"1..28\n"
;
my
@warns
;
BEGIN {
$SIG
{__WARN__} =
sub
{
push
@warns
,
@_
}; $^W = 1 };
%x
= ();
$y
= 3;
@z
= ();
$X::x
= 13;
use
vars
qw($p @q %r *s &t $X::p)
;
my
$e
= !(
grep
/^Name
"X::x"
used only once: possible typo/,
@warns
) &&
'not '
;
print
"${e}ok 1\n"
;
$e
= !(
grep
/^Name
"main::x"
used only once: possible typo/,
@warns
) &&
'not '
;
print
"${e}ok 2\n"
;
$e
= !(
grep
/^Name
"main::y"
used only once: possible typo/,
@warns
) &&
'not '
;
print
"${e}ok 3\n"
;
$e
= !(
grep
/^Name
"main::z"
used only once: possible typo/,
@warns
) &&
'not '
;
print
"${e}ok 4\n"
;
(
$e
,
@warns
) =
@warns
!= 4 &&
'not '
;
print
"${e}ok 5\n"
;
eval
<<'EOE';
$e = ! $main::{p} && 'not ';
print "${e}ok 6\n";
$e = ! *q{ARRAY} && 'not ';
print "${e}ok 7\n";
$e = ! *r{HASH} && 'not ';
print "${e}ok 8\n";
$e = ! $main::{s} && 'not ';
print "${e}ok 9\n";
$e = ! *t{CODE} && 'not ';
print "${e}ok 10\n";
$e = defined $X::{q} && 'not ';
print "${e}ok 11\n";
$e = ! $X::{p} && 'not ';
print "${e}ok 12\n";
EOE
$e
= $@ &&
'not '
;
print
"${e}ok 13\n"
;
eval
q{use vars qw(@X::y !abc); $e = ! *X::y{ARRAY}
&&
'not '
};
print
"${e}ok 14\n"
;
$e
= $@ !~ /^
'!abc'
is not a valid variable name/ &&
'not '
;
print
"${e}ok 15\n"
;
eval
'use vars qw($x[3])'
;
$e
= $@ !~ /^Can
't declare individual elements of hash or array/ && '
not ';
print
"${e}ok 16\n"
;
{
local
$^W;
eval
'use vars qw($!)'
;
(
$e
,
@warns
) = ($@ ||
@warns
) ?
'not '
:
''
;
print
"${e}ok 17\n"
;
};
eval
'use warnings "vars"; use vars qw($!)'
;
$e
= ($@ || (
shift
(
@warns
)||
''
) !~ /^No need to declare built-in vars/)
&&
'not '
;
print
"${e}ok 18\n"
;
no
strict
'vars'
;
eval
'use vars qw(@x%%)'
;
$e
= $@ &&
'not '
;
print
"${e}ok 19\n"
;
$e
= ! *{
'x%%'
}{ARRAY} &&
'not '
;
print
"${e}ok 20\n"
;
eval
'$u = 3; @v = (); %w = ()'
;
$e
= $@ &&
'not '
;
print
"${e}ok 21\n"
;
eval
'use vars qw(@y%%)'
;
$e
= $@ !~ /^
'\@y%%'
is not a valid variable name under strict vars/ &&
'not '
;
print
"${e}ok 22\n"
;
$e
= *{
'y%%'
}{ARRAY} &&
'not '
;
print
"${e}ok 23\n"
;
eval
'$u = 3; @v = (); %w = ()'
;
my
@errs
=
split
/\n/, $@;
$e
=
@errs
!= 3 &&
'not '
;
print
"${e}ok 24\n"
;
$e
= !(
grep
(/^Global symbol
"\$u"
requires explicit
package
name/,
@errs
))
&&
'not '
;
print
"${e}ok 25\n"
;
$e
= !(
grep
(/^Global symbol
"\@v"
requires explicit
package
name/,
@errs
))
&&
'not '
;
print
"${e}ok 26\n"
;
$e
= !(
grep
(/^Global symbol
"\%w"
requires explicit
package
name/,
@errs
))
&&
'not '
;
print
"${e}ok 27\n"
;
{
no
strict;
eval
'use strict "refs"; my $zz = "abc"; use vars qw($foo$); my $y = $$zz;'
;
$e
= $@ ?
""
:
"not "
;
print
"${e}ok 28 # use vars error check modifying other strictness\n"
;
}