case '/': /* may be division, defined-or, or pattern */ if ((PL_expect == XOPERATOR || PL_expect == XTERMORDORDOR) && s[1] == '/') { ... AOPERATOR(DORDOR); } else if (PL_expect == XOPERATOR) { ... Mop(OP_DIVIDE); } else { ... s = scan_pat(s,OP_MATCH); } #### case '.': ... if (PL_expect == XOPERATOR || !isDIGIT(s[1])) { ... Aop(OP_CONCAT) #### $ perl -MO=Deparse -e 'sub foo(&) {}; foo { "foo" } . 5' sub foo (&) { } foo(sub { 'foo'; } ) . 5; -e syntax OK $ perl -MO=Deparse -e 'sub foo(&) {}; foo { "foo" } .5' Too many arguments for main::foo at -e line 1, at EOF -e had compilation errors. sub foo (&) { } &foo(sub { 'foo'; } , 0.5); #### $ perl -E 'say 1 .5' 15