perl -c adduser gives its first error as
"my" variable $new_uid masks earlier declaration in same scope at adduser line
283.
First, it doesn't seem to me I'm declaring the variable at all at 283. I
suppose it could be an implicit declaration if there wasn't a previous
declaration, but there is at 103.
Second, I don't see any earlier declarations in any scope except the outer one.
Third, the variiable was declared, with "our $new_uid;" much earlier in the
file.
Could anyone explain to me what's going on? A couple other questions appear
after the code.
32 use warnings;
33 use strict;
34 use Debian::AdduserCommon;
35 use Getopt::Long;
36 use File::Spec::Functions;
37 use File::Touch;
...
103 our $new_uid = undef;
....
160 # Parse options, sanity checks
161 unless ( GetOptions ("quiet|q" => sub { $verbose = 0 },
...
173 "uid=i" => \$new_uid, # still in arguments to GetOptions
Lines 103 and 173 are the only places $new_uid occurs in the text before line
283.
272 if ($use_template = &use_template) {
273 # we are using templates
274 if (check_template( $conf_dir, \%template)) {
275 merge_template( \%template, \%system)
276 }
277 # rewrite request as needed
278 if defined($new_name) {
279 # trying to create a new user
280 if (my @old = $$($template{uname}){$new_name}) {
281 # requested user is in the template
282 my $olduid = $$old[2];
**283 dief( gtx("Specified UID %d for %s does not match template
UID of %d.\n"), $new_uid,
284 $new_name, $olduid) if defined($new_uid) &&
$new_uid != $olduid;
285 $new_uid = $olduid;
286 my $oldgid = $$old[3];
Bonus question #1: Where does the relevant scope start? I think it's 280, but
if none of the if's create scopes it could be the start of the file.
Bonus question #2: If I change 280 to to "if (my $old = ...." I get the error
"my" variable $old masks earlier declaration in same statement at adduser line
282.
Why? I mean, there's only declaration in the statement, and it seems to be on
the first line even if the "statement" is everything up to the end of the if ..
else .. block.
The archives indicate that syntax errors sometimes produce seemingly unrelated
"masks earlier declaration" errors, but even if this is a syntax error (it
seems more like a semantic problem to me) the error seems odd.
Thanks.
Ross Boylan
P.S. This is perl 5, version 14, subversion 2 (v5.14.2) built for
x86_64-linux-gnu-thread-multi
(with 88 registered patches, see perl -V for more detail)
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/