You'll need to provide some short code examples for us to be much help. That being said, typically the first argument to a method is the instance object itself ( aka $self or this ) . Is that maybe tripping you up?
For example, if you build an OO module, but call it as a function and not an object method you may well be shifting off your first argument to the method in your own code.
Also, @ARGV is only used for getting commandline arguments, not when pulling in arguments to functions or method calls.
| [reply] |
ARGV array getting shifted
No such a thing as a "ARGV array". That's @ARGV.
A have a very short perl script that executes OO Perl Modules that I created.
This is irrelevant.
I have the perl script pass argument #1 to a method and it isn't there.
What? The method or the first argument. Argument to what? To the script?
I added more arguments and found that the first argument is getting shifted off
If you're shifting it, than that's to be expected. Perhaps you're doing a shift with no arguments, somewhere, and you forgot that it "evaluates to" shift @_ within a sub and to shift @ARGV outside. Hard to say without seeing any code, anyway.
I switched my code to have it in the PM, but same undef issue.
Huh?!?
| [reply] [d/l] [select] |
Pure OO, except for the script invoking the controller PM. Since @ARGV is global, it is available to all PMs, but better design dictates not referencing it within deeper OO code. One PM has a filehandle read, but can this be shifting it just by being included in a "use"?
| [reply] |
One PM has a filehandle read, but can this be shifting it just by being included in a "use"?
It can and it will if you use the while (<>) construct directly in the main block of your module or in a subroutine that gets called by the main block.
Keep in mind that use Module; actually runs all the code in that module immediately. Unless you're doing something clever, like setting up the module's interface, it's bad form to have arbitrary code in a module. Normally, a module should only set up an API, not run all kinds of code immediately.
| [reply] [d/l] [select] |
Pure OO, except for the script invoking the controller PM.
Not really understanding how this relates to my comment. In a "Pure OO" module, you could still have a spurious lonely shift.
Since @ARGV is global, it is available to all PMs, but better design dictates not referencing it within deeper OO code.
Yep, certainly! So what?
One PM has a filehandle read, but can this be shifting it just by being included in a "use"?
No, it can't. I suspect it's something else. Still hard to say without seeing any code. Of course the actual one may be too large to be posted here. You should try to trim it down to a bare minimum still exhibiting the problem and while doing so you may even find out yourself at which point in the actual code the shift occurs.
| [reply] |