develooper Front page | perl.perl5.porters | Postings from February 2018

Re: Why does inclusion of require that is not executed have sideeffects?

Thread Previous | Thread Next
Karl Williamson
February 23, 2018 17:45
Re: Why does inclusion of require that is not executed have sideeffects?
Message ID:
On 02/23/2018 10:27 AM, Eirik Berg Hanssen wrote:
> On Fri, Feb 23, 2018 at 6:06 PM, Dagfinn Ilmari Mannsåker 
> < <>> wrote:
>     demerphq < <>> writes:
>     > Why would a require that is not executed have any side effects? Why is
>     > the eval necessary to avoid those side effects? Is this a bug or have
>     > I missed something?
>     As haarg pointed out on #p5p, merely compiling a 'require BAREWORD'
>     creates the package.  A bit of digging leads to a
>     gv_stashpvn(…, GV_ADD|…) call in toke.c, and some more digging with git
>     blame shows that this was added in 5.001, with the following Changes
>     entry:
>     NETaa13235: require BAREWORD now introduces package name immediately.
>     From: Larry Wall
>     Files patched: toke.c
>       require BAREWORD now introduces package name immediately.  This
>     lets the
>       method intuit code work right even though the require hasn't
>     actually run
>       yet.
>     So it's a deliberate desicion by Larry in 1995 to make indirect method
>     syntax work better with require (as opposed to use).
>    Nice sleuthing.
>    Now, I do find myself wondering if C<< perldoc -f require >> should 
> document this compile time effect?
>    I mean, I doubt it could be called an implementation detail likely to 
> change, but neither do I imagine most programmers would ever need to 
> know, so ... I dunno, what does the documentation aspire to be?
> Eirik

Given how much unnecessary work was required to find this now, I think 
it should be documented.

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About