Re: Operating on pairs, Was Re: Revised solution #2
Carl Mäsak wrote: Andy (): map? perl6 -e 'my $x = :a5; say $x.map( { .value / 10} ).fmt(%s)' Yes, sure. That'll print a tenth of the value of $x. The '.fmt(%s)' is a no-op in this case. // Carl Not entirely a no-op. Thus $perl6 my $x=:a5; say $x.map({.value/10}).fmt(the value is %s%%) the value is 0.5% But we have lost the .key part of the pair my $x=:a5; say $x.map({.value/10}).fmt(key %s val %s) Null PMC access in get_string() Still, even if we could do something like (which we cant with rakudo, not sure if this is possible in perl6 in principle) say $pair.map({.key = .value*100/$count}).fmt(Candidate %s has %s percent of vote); would it be more elegant than printf(Candidate %s has %s percent of vote\n,$pair.key,$pair.value*100/$count); I dont think so.
Operating on pairs, Was Re: Revised solution #2
Larry Wall wrote: On Wed, Jan 14, 2009 at 09:55:38AM +0300, Richard Hainsworth wrote: However, I came across one thing in solution #3 that I posted yesterday. $pair.fmt(%s %s) is nice, but it doesnt allow for any action on either value or key before printing (I wanted to print the value as a percentage), and this had to be done in a printf statement. In fact the printf statement was the longest and ugliest statement in the program. Maybe I'm missing something, but you can always do: $pair.key.foo.fmt(%s), $pair.value.bar.fmt(%s) Larry This surely requires that foo and bar are defined as sub's. Suppose I just need a single transformation of a value before outputting it? Eg., expressing .value as a percentage of $count? Is there some way to include a one-off in the subroutine chain? Something like $pair.value.{shift / 10}.fmt(%s);