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

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

Thread Next
From:
demerphq
Date:
February 23, 2018 16:17
Subject:
Why does inclusion of require that is not executed have sideeffects?
Message ID:
CANgJU+Xm1nKhmiBuFYx_fgdPPgTtZUbzOMrcgm9wQnbvYhJ0WA@mail.gmail.com
Repost with a better subject. Sorry for the duplication....

On 23 Feb 2018 17:31, "Yves Orton" <demerphq@gmail.com> wrote:

+            if ($pack->can("((")) {
+                # this eval is required, or fail the overload test
+                # in dist/Carp/t/vivify_stash.t, which is really quite weird.
+                # Even if we never enter this block, the presence of
the require
+                # causes the test to fail. This seems like it might be a bug
+                # in require. Needs further investigation - Yves
+                eval "require overload; 1"
+                    or return "use overload failed";
+            }
+            my $sub = _fetch_sub(overload => 'StrVal');
+            return $sub ? &$sub($arg) : "$arg";
         }
     }



Can anybody shed any light on why the eval above is required? If you
replace that line with a simple "require overload;" then even when the
if condition is false and the require is NOT executed we fail the
"didn't load overload" test in vivify_stash.t which makes no sense to
me.

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?

Yves


-- 
perl -Mre=debug -e "/just|another|perl|hacker/"

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