> -----Original Message-----
> From: Elias Assmann [mailto:[EMAIL PROTECTED]]
> Sent: Monday, June 17, 2002 5:45 PM
> To: [EMAIL PROTECTED]
> Subject: Can't call method "foo" without a package or object reference
> at...
>
>
> Hello,
>
> I ran into this strange error... What I got was this:
>
> Can't call method "parse" without a package or object reference at
> ./calc.pl
> line 60, <STDIN> line 1 (#1)
>
> and from 'diagnostics':
>
> (F) You used the syntax of a method call, but the slot filled by
> the object reference or package name contains an expression that
> returns a defined value which is neither an object reference nor a
> package name.
>
> Now that didn't tell me anything at all :-) Because, you see, I just
> coudln't relate it to my code, the relevant line of which was simply:
>
> @tok = parse $_;
>
> I played around a bit with this and it seems that I get that error
> whenever I try to call a function which is declared only later on, and
> do it without parens around the arguments... That can't be right, can
> it?
Yes, it's right. Perl is interpreting this as the "indirect object
notation",
since it doesn't know that parse is a sub yet. To see how Perl is parsing
this,
run the following from your shell:
$ perl -MO=Deparse -e '@tok = parse $_'
@tok = $_->parse; << This is how Perl sees your code
The error message is because $_ is not an object reference or a package
name,
so Perl can't figure out which parse method to call.
You can fix this by either:
1. Declare the sub by either moving its definition to the top of your file
or
adding a sub parse; line at the top of your file. Try this:
$ perl -MO=Deparse -e 'sub parse; @tok = parse $_'
sub parse {}
@tok = parse($_); << Now it's a function call
2. Use parentheses in all function calls. Then you don't have to worry about
where the sub is defined.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]