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


in reply to perl doesn't like variable

Under use strict, your $counter is initialized before it is declared:
$counter = 0; use vars qw($counter);

So you have to declare it (outside of while(<INPUT>)):
my $counter = 0;

Note, that you don't need use vars qw($counter); afterwards.
Otherwise you would declare just another variable called $counter living in the symbol table:
my $counter = 0; # declare and initialize lexical variable use vars qw($counter); # declare global variable living in symbol tabl +e + + $counter = 0; # initialize again, just to show that $counter in 'use v +ars' is not affected print "\$main::counter: $main::counter\n"; # $counter living in symbol + table: not initialized $main::counter = 1; # initialize $counter in symbol table print "\$main::counter: $main::counter\n"; # prints 1 print "\$counter: $counter\n"; # prints 0