# New Ticket Created by  Sam S. 
# Please include the string:  [perl #131754]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=131754 >


A more helpful error message than just the generic "Two terms in a row" 
could be thrown when the user writes e.g.

     foo 42;

as if `foo` were a subroutine, but it's actually some other kind of 
bareword such as:

* a constant           - `constant foo = ...`
* a sigilless variable - `my \foo = ...`
* a typename           - `class foo { ... }`
* a label              - `foo: ...`
* a term               - `sub term:<foo> { ... }`

The error message could be expanded like this:

     ===SORRY!=== Error while compiling [...]
     Two terms in a row
     at [...]
     ------> say foo⏏ 42;
     Note: "foo" is not a subroutine, but a constant declared at [...].

Or in the special case that there actually *is* a subroutine with the 
same name in any parent scope (including CORE::), but it's clobbered by 
the other bareword:

     ===SORRY!=== Error while compiling [...]
     Two terms in a row
     at [...]
     ------> say foo⏏ 4;
     Note: "foo" here does not refer to the subroutine declared
     at [...], but to the constant declared at [...].

If the sub is declared inside the setting, the phrase "the subroutine 
declared at [...]" could be replaced with "the built-in subroutine".

Reply via email to