Matt Diephouse wrote: >Brent 'Dax' Royal-Gordon <brentdax@gmail.com> wrote: > > >>Besides, I think "as" will do just fine, especially since you can now >>interpolate method calls as well. You can even do something like this >>if you want to perform bulk formatting: >> >> say join ' ', ($n1, $n2, $n3) >>.as('%d'); >> >> > >What about: > > say [ $n1, $n2, $n3 >>.as('%d') ].join; > >? > >Can I (1) use join on a bracketed list > Certainly. Almost anywhere you can use an array, an array ref will do instead. >and (2) leave off the >parentheses around C<$n1, $n2, $n3>? (I couldn't find where hyper ops >are on the precedence table.) > > I think you'd need the parens there, to distinguish that the . operator applies to the list, not to $n3. Hyper's are not on the list because they are adverbs to the existing operators. In this case, you're using unary ., so you follow it's precedence. 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. >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. 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. >(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. -- Rod AdamsThread Previous | Thread Next