Yes, the context of the function call can be whatever you want.

$x = @array[+foo];
The call to foo is made in numeric item context. The result, a number, is then "evaluated" in list context and passed to postcurcumfix:< > as the first item in the list, which it can perceive in various ways depending on the parameter list declaration. But it knows that a single number was passed and acts accordingly.

Suppose that the value in the array at that position is 42. Will the return value contain a scalar, 42, or a list of one item? The function execution does not get to impose the context of its surrounding expression; that is decided at compile time. Since the argument is not known to be singular at compile-time (using rules yet to be explained), it must be in list context. So:

$temp= foo; $x= @array[$temp]; # holds Num of 42 $x= @array[foo]; # holds Array ref of [ 42 ]
I suppose that the presence of a context specifier "+" as the top-level expression in the brackets could be among the rules the compiler uses to decide this is the singular form. But this is NOT explained anywhere, and that is my point.

—John
Seriously jet-lagged


In reply to Re^4: [Perl 6] single-value vs. array slices by John M. Dlugosz
in thread [Perl 6] single-value vs. array slices by John M. Dlugosz

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.