develooper Front page | perl.perl6.language | Postings from March 2005

Re: A possible solution for s?pintf

Thread Previous | Thread Next
From:
Larry Wall
Date:
March 13, 2005 17:15
Subject:
Re: A possible solution for s?pintf
Message ID:
20050314011527.GA21118@wall.org
On Sat, Mar 12, 2005 at 10:26:51PM -0600, Rod Adams wrote:
: You could easily write the above as
: 
:    say (($n1, $n2, $n3)».as('%d')).join;
: 
: What I'm not certain about is if
: 
:    say ($n1, $n2, $n3)».as('%d').join;
: 
: does the same thing, but I think it does.

Yes, hyper only modifies one operator, not all the rest of them, the
operator in this case being ".as('%d')".  On the other hand, it may
be that .as automatically iterates formats when it needs to, so maybe
the hyper mod is unnecessary.  On the gripping hand, it's then not clear
whether

    @foo.as(Bar)

is intending to convert each element to a Bar or the array as a whole.

: >And this:
: >
: > say [ $num => '%d', $str => '%s' ] >>.key.as(.value);
: >
: > 
: >
: No. .key returns a string, which you call the .as method of, which is 
: fine, but the .value is a separate expression, and references the 
: current topic, which is not tied to the array.

Probably need something with an explicit closure (or loop) to make
that work right, but I could be wrong.  As it stands now it doesn't
seem like it would become common idiom.

: Related to what I'm not sure about above is that I think you'd have to 
: say C< [...]».key».as($pattern) > to get it working correctly.

If .as() autohypers then the second hyper is not necessary.

We could go as far as to define .keys on a list of pairs.  If we did that,
then a non-pair might be assumed to match either undef or 1.  The only
problem I see with doing that is that, in a sense, the keys of an array
are the integers.  But that'd presumably be easy to get with 0..^@foo.
That only works for a named array, though.

: >(4) use square brackets in
: >this instance (to make sure my list doesn't form a parameter list to
: >C<say>)?
: >
: Yes, but whitespace between the "say" and "(" should do the trick as 
: well. Might generate a warning, however.

I hope not.  We'll have to see how quickly people learn to internalize
the new whitespace dependencies.  It's going to be harder for some
people than others.  For some people it may be impossible.  :-)

Larry

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