This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make barewords constant-foldable
authorAaron Crane <arc@cpan.org>
Sun, 15 May 2016 18:00:53 +0000 (19:00 +0100)
committerAaron Crane <arc@cpan.org>
Sun, 15 May 2016 19:19:21 +0000 (20:19 +0100)
commit2e6807b5b9d6bff0efdfbbed7b7731e04ea21273
treec3d2b34c24f3facaa596f5f4f2c27fee8941d9b5
parent1ec2b028f490cff41b7f0c1131c900b58431c722
Make barewords constant-foldable

Commit 11fa937b2766784f0f812687a7f81dd3761e605f, from August 1999, changed
constant folding to treat barewords as unfoldable. Public mailing-list
archives from that period are incomplete, unfortunately, and this change in
particular is no longer well documented; the only message still available
seems to be <199907140903.CAA07505@activestate.com>, with subject "Re:
Unwanted perl helpfullness". That message quotes a bug reporter pointing out
that a constant-folded bareword would fail to trigger the "not allowed while
strict subs in use" error under "use strict".

However, there's no information available about why the bug was fixed in this
way, rather than by merely ensuring that constant folding would produce that
error when necessary. The no_bareword_allowed() routine did already exist at
that point, for example. This change therefore adopts that approach.

This causes one minor change in behaviour: since barewords now take part in
constant folding, concatenating a bareword with another constant in void
context now produces a warning for the concatenated string, rather than for
the concatenation op. This seems like an acceptable change, given that
non-bareword constants already behave in the same way.
op.c
t/lib/strict/subs
t/lib/warnings/2use
t/lib/warnings/op
t/perf/opcount.t