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

badbanana has asked for the wisdom of the Perl Monks concerning the following question:

i have this two files below. the first one produces no errors but the second one produces the following errors:

Global symbol "$x" requires explicit package name (did you forget to declare "my $x"?) at ./two.pl line 6.
Global symbol "$y" requires explicit package name (did you forget to declare "my $y"?) at ./two.pl line 7.
Global symbol "$x" requires explicit package name (did you forget to declare "my $x"?) at ./two.pl line 10.
Global symbol "$y" requires explicit package name (did you forget to declare "my $y"?) at ./two.pl line 13.
Global symbol "$x" requires explicit package name (did you forget to declare "my $x"?) at ./two.pl line 15.
Global symbol "$y" requires explicit package name (did you forget to declare "my $y"?) at ./two.pl line 15.
Execution of ./two.pl aborted due to compilation errors.

this is file 1:
#!/usr/bin/perl use warnings; use strict; $a=0; chomp($a=<STDIN>); print $a, "\n";
and this is file 2:
#!/usr/bin/perl use warnings; use strict; $x=0; $y=0; print "enter first number "; chomp($x=<STDIN>); print "enter second number "; chomp($y=<STDIN>); print "Product ",$x*$y, "\n";
i can't seem to figure out what's causing the errors for file 2. the declaration is the same in both files.

Replies are listed 'Best First'.
Re: question on declaring variables
by toolic (Bishop) on Nov 22, 2018 at 12:03 UTC
    Yes, the declaration is the same for both files, but $a is a special variable, whereas $x and $y are not. You get the error messages because you correctly use strict:
    Because of their special use by sort(), the variables $a and $b are exempted from this check.
    You should avoid using $a and $b because they are special for the sort function. As the helpful message reports, you need to declare x and y with my.
      oh i see. thanks, got it!