http://www.perlmonks.org?node_id=11119500


in reply to Re^2: On Backwards Compatibility and Bareword Filehandles
in thread On Backwards Compatibility and Bareword Filehandles

Existing convention discourages naming subroutines or packages in ALL UPPERCASE anyway, and I do not suggest changing that.

Sure, but I provided two widely-used examples that violate this convention. I could also mention LWP, DBI, CGI....

An explicit "::" can be prefixed to top-level packages when needed or assumed when no parse conflict exists.

The problem is I don't know when a parse conflict will exist.

If I write code with a bareword filehandle in a module, I don't know how that module will be used. I don't know when it will be loaded. I don't know what will be loaded before it and I don't know what will be loaded after it.

If the parser parses this construct in different ways depending on what's loaded, it's fragile and undecidable.

An explicit "::" can be prefixed to top-level packages when needed or assumed when no parse conflict exists.

I don't see how this solves my problem here. I don't want to refer to a top-level package. I want a bareword filehandle (for the sake of argument, at least—I don't want bareword filehandles at all, because of this problem).

Even if this did solve the problem, I don't think it's worth the tradeoff. Now you've introduced another implicit rule, which is that we must prefix all single-word package names to avoid any potential conflict with a bareword filehandle somewhere.

I use a lot more package names than I do filehandles.