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
From:
Karl Williamson
Date:
February 23, 2018 17:45
Subject:
Re: Why does inclusion of require that is not executed have sideeffects?
Message ID:
83008b63-57dd-c19f-760e-91a9d55abc6c@khwilliamson.com
On 02/23/2018 10:27 AM, Eirik Berg Hanssen wrote:
> On Fri, Feb 23, 2018 at 6:06 PM, Dagfinn Ilmari Mannsåker 
> <ilmari@ilmari.org <mailto:ilmari@ilmari.org>> wrote:
> 
>     demerphq <demerphq@gmail.com <mailto:demerphq@gmail.com>> 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


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About