develooper Front page | perl.perl5.porters | Postings from June 2022

Re: Pre-RFC: yield true feature

Thread Previous | Thread Next
From:
Alexander Hartmaier
Date:
June 14, 2022 06:15
Subject:
Re: Pre-RFC: yield true feature
Message ID:
CAB49QrZAxWBuAaSt6eame6vX5pdJ1EiaxNN24h19zjTBG=JUAQ@mail.gmail.com
On Mon, Jun 13, 2022 at 12:43 PM Graham Knop <haarg@haarg.org> wrote:

> On Mon, Jun 13, 2022 at 12:21 PM Alexander Hartmaier
> <alex.hartmaier@gmail.com> wrote:
> >
> > On Sat, Jun 11, 2022 at 10:37 AM Neil Bowers <neilb@neilb.org> wrote:
> >>
> >> > Can someone show an example, ideally on CPAN, where this gets used?
> >>
> >> I _think_ you were asking for an example of someone using the return
> value from a require. In which case:
> >>
> >>
> https://grep.metacpan.org/search?qci=&q=%3D%20require&qft=&qd=Acme-MetaSyntactic-Themes&f=lib%2FAcme%2FMetaSyntactic%2Funicode.pm
> >>
> >> This is in BooK’s Acme::MetaSyntactic::unicode module (yeah, Acme):
> >>
> >>     if ( $] >= 5.006 && $] < 5.007003  ) {
> >>         eval { $data = require 'unicode/Name.pl'; };
> >>     }
> >>     elsif ( $] >= 5.007003 ) {
> >>         eval { $data = require 'unicore/Name.pl'; };
> >>
> >>         # since v5.11.3, unicore/Name.pl creates subroutines
> >>         # they end up in our namespace, so get rid of them
> >>         undef *code_point_to_name_special;
> >>         undef *name_to_code_point_special;
> >>     }
> >>
> >> Guessing there may be other examples on CPAN – this is just the first
> one I found with grep.metacpan.org.
> >>
> >> Neil
> >>
> >
> >
> > Thanks for the grep.metacpan.org link, haven't thought about it for
> finding examples. I've looked at some others and using the return value of
> a require call is used quite frequently. So option 3 isn't a good one in my
> opinion, as a module changed to use the feature, most probably with 'use
> v5.38;' not thinking about the enabled feature, which would lead to another
> module failing because of the changed behavior.
>
> Anything relying on the return value of require as being anything
> other than true is already broken. The second time require is called
> for a module, it will turn true, not whatever the module tried to
> return. unicode/Name.pl is meant to be loaded via do, not require, in
> addition to being internal only.
>
> Going back to perl 5.30, the last version Acme::MetaSyntactic passed
> its tests on, it still fails if you cause Name.pl to be loaded early.
>
> $ perl -e'use strict; use warnings; use charnames qw(greek); use
> Acme::MetaSyntactic; my $meta = Acme::MetaSyntactic->new("unicode");
> die "no names!" if !$meta->name;'
> no names! at -e line 1.
>
> I'd say it's better to cause these things to always fail, rather than
> allowing them to sometimes appear to work.
>

Look at some of the other modules using the return value of require from
the grep.metacpan.org link.

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