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


in reply to How do I find out which variables I'm not using?

Casting my mind back a decade or so to Perl4, I do recall having to write code like this to stop the warning messages:

$x || $y || $z || 1;

What you say about my variables appears to be right on the mark. Here's some tests:

[ ~/tmp ] $ perl -we 'use strict; my $x' [ ~/tmp ] $ perl -we 'my $x' [ ~/tmp ] $ perl -we '$x' Useless use of a variable in void context at -e line 1. Name "main::x" used only once: possible typo at -e line 1. [ ~/tmp ] $ perl -we 'no warnings qw(once); $x' [ ~/tmp ] $

I would tentatively suggest that the reason stems from the fact that lexically scoped variables are stored in the scratchpad while dynamically scoped variables are stored in the symbol table. Presumably the used only once test is only performed on the symbol table.

Another monk, more familiar with Perl's internals, may be able to provide the reason for this. Anyone?

Regards,

PN5