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

Re: Pre-RFC: yield true feature

Thread Previous | Thread Next
From:
Oodler 577 via perl5-porters
Date:
June 7, 2022 04:10
Subject:
Re: Pre-RFC: yield true feature
Message ID:
Yp7Pjbsl47daFA8P@odin.sdf-eu.org
* Yuki Kimoto <kimoto.yuki@gmail.com> [2022-06-07 09:16:22 +0900]:

> 2022-6-7 7:07 Neil Bowers <neilb@neilb.org> wrote:
> 
> > This is a retrospective Pre-RFC for a proposal from Curtis, for which he
> > submitted a draft RFC[1]. We nearly missed it when reviewing proposals
> > in-flight in our PSC meeting last week, and decided to trigger a discussion
> > here, to reinforce the process.
> >
> > ...
> >
> > [1] https://github.com/Perl/RFCs/pull/16
> >
> >
> I want to hear the haarg' proposal a little more.
> 
> >There is another model that could be used. could always ignore the return
> value from the file if the feature was enabled. This is simpler than the
> previous option, but accomplishes essentially the same thing. It still
> needs special handling in , but doesn't need to care about an implicit vs
> explicit return. In practice, the return value from a ed file is not usable
> for anything. The only impact it will have on perl's behavior is throwing
> an error for a false value. This is better done by throwing a real error.
> If there is no real purpose for returning an explicit value, why complicate
> the model by trying to handle specially?
> 
> Does this mean changing the behavior of "use", "require", "do" in the
> "yield_true"
> feature?

I can't find a good read on what the "1;" is for; I just know it needs
to be there and can be anything "truthy". I've even seen cheeky module
authors return "666;", which to be fair is true. However, upon reading
what I could find in perldocs and about, it seems that if it is a "1;"
or something else; C<use>, C<require>, and C<do> all need something to
say definitively that "here is the end of package Foo's scope". Would
that be a "feature" or just something internal that could mark the "end"
of a package scope when it hit something like the end of the file? 

FWIW, I don't find this an issue; I've been doing it for along time. Maybe
what is needed a macro like "__END__" or a keyword like "egakcap;" that
simply returns something truthy. I mean the target audience seems to be
the human being who is perusing googlestackoverflow about "how to write
a Perl module" ... this seems more clear than either the "1;" or literally
nothing; and it's kind of unix-y.

  package Foo;
  ...
  ...
  egakcap Foo;

Or something a little heredoc-y:

  package Foo;
  ...
  ...
  Foo; # or for a little flexibility, __PACKAGE__

Or wouldn't this suffice?

  package Foo;
  ...
  ...
  package main;

Or perhaps just encourage the use of lexical blocks when defining packages.
Since that since to indicate precisely the area of scope that "1;" is
meant to disambiguate (at the end of a file?).

I know this is about removing the "need" for "1;" but I think the real
need is to provide a more obvious "end of package scope" marker, which
ultimately really just needs to return a truthy value.

Cheers,
Brett

-- 
--
oodler@cpan.org
oodler577@sdf-eu.org
SDF-EU Public Access UNIX System - http://sdfeu.org
irc.perl.org #openmp #pdl #native

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