So you can see there is no indirect object notationWell, syntactically print STDOUT "whatever", new Foo "whatever" and grep {;} "whatever" look pretty similar to me. I know only one name for it - "indirect object slot" - it's used for different purposes, yeah, but Perl is full of this kind of overloaded grammar so... Anyway, as far as I can tell foo {;} // 7 is parsed like grep {;} m// 7.
$ perl -MO=Deparse -e 'sub foo(&) {;} foo {;} //' Too many arguments for main::foo at -e line 1, at EOF -e had compilation errors. sub foo (&) { } &foo(sub { } , //); $ perl -MO=Deparse -e 'sub foo(&) {;} foo {;} 1, 2, 3' Too many arguments for main::foo at -e line 1, at EOF -e had compilation errors. sub foo (&) { } &foo(sub { } , 1, 2, 3); $ perl -MO=Deparse -e 'sub foo(&) {;} foo {;} 1 2' Number found where operator expected at -e line 1, near "1 2" (Missing operator before 2?) Too many arguments for main::foo at -e line 1, near "1 2" syntax error at -e line 1, near "1 2" -e had compilation errors. sub foo (&) { }
Its anonymous sub, match operator, and a seven, and these three scalars/expressions need to be separated by operators, like comma, plus minus ...Well, no comma is necessary between the "indirect object slot" (or whatever it's called) and the next argument. Only 7 needs a preceding comma.
In reply to Re^3: strangeness with prototypes and 'logical defined or'?
by Anonymous Monk
in thread strangeness with prototypes and 'logical defined or'?
by ed_hoch
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |