I don't actually think it will be necessarily apparent though. With test.pl:
I get:use strict; use warnings; use Employee my $person = Employee->new(); $person->name("bob"); $name = $person->name; print "hello, "; print $name;
It's obvious that $name needs a declaration to make strict happy, but you could still sit and stare at the $person warnings and not realize why it's complaining.Global symbol "$person" requires explicit package name at test.pl line + 5. Global symbol "$name" requires explicit package name at test.pl line 6 +. Global symbol "$person" requires explicit package name at test.pl line + 6. Global symbol "$name" requires explicit package name at test.pl line 8 +.
The problem is the missing semi-colon after use Employee. The "my $person" line is taken as an import to request from Employee, and is executed at compile time in a scope all its own, so the rest of the program doesn't use a lexical $person, and the global $person isn't ever set.
In reply to Re^2: Can't call method on an undefined value?
by ysth
in thread Can't call method on an undefined value?
by jashmenn
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |