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

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

Thread Previous
From:
Sawyer X
Date:
February 26, 2018 11:13
Subject:
Re: Why does inclusion of require that is not executed have sideeffects?
Message ID:
cefe9965-d686-040e-58c7-8e7d1f87e194@gmail.com


On 02/25/2018 05:05 AM, demerphq wrote:
> On 24 February 2018 at 23:18, Sawyer X <xsawyerx@gmail.com> wrote:
>>
>> On 02/23/2018 07:45 PM, Karl Williamson wrote:
>>> 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.
>> +1.
> commit af596f2c321249499f853ae4af57570ef48640d9
> Author: Yves Orton <demerphq@gmail.com>
> Date:   Sun Feb 25 04:04:02 2018 +0100

+1

I would also note that this any path in "require" is subject to @INC,
which will not, by default, include the current directory. (Or something
to that effect.)

Thread Previous


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