After rereading your post, I realize all you asking for was a indirect-object syntax for list constructors equivalent to the indirect-object syntax for list operators such as print and join.
I personally believe that either you should reread my posts again or that I have terribly serious expressive problems for all that I "want" (please, notice the quotes) is a prefix operator that creates an anonymour arrayref or hashref out of a list, alternative to the currently existing circumfix ones: [] and {}. For completeness and consistency, I'm also asking the same thing wrt subrefs and scalar refs. Thus, instead of:
my $aref = [1..42];
my $href = { foo => 1, bar => 2 };
my $cref = do { my @x=1..42; sub () { @x } };
my $sref = do { my $x=42; \$x };
I would like, say:
my $aref = \@ <== 1..42;
my $href = \% <== foo => 1, bar => 2;
my $cref = \& <== 1..42;
my $sref = \$ <== 42;
Except that this would clash with current Perl syntax, since perl would try to parse e.g. the construct in the first line like a reference to the @< variable, and similarly for the others.
Thus I'm asking about your own ideas for a good syntax: [] and {} only take two charachters, and I would like something just as lightweight; in addition the operators should intuitively and immediately suggest the kind of reference that they create, hence my idea of somehow using sigils. I'm not asking this out of a practical need, but just for fun and brainstorming. (But if a very good suggestion pops out, maybe...)
| [reply] [d/l] [select] |
The word prefix is still throwing me. I think a better term would be predicate. Again, the notation you propose would be ambiguous. In your example: my $href = \% <== foo => 1, bar => 2; That could either mean a hash whose first key is a hashref 'foo' or a reference to a hash with one key 'foo' followed by the comma operator and a two element list ( bar, '2' ). Although in the case provided it may be clear what you intended, the ambiguity increases if one were to attempt to nest operators:
my $ref = \%< ship => Serenity, crew => \@< Mal, Wash, Jane, Zoe, pas
+sengers => \@< Simon, Book
Perl has no way of knowing you want 'passengers' to be in the same hash as 'ship' but instead you would end up with crew =>[Mal, Wash, Jane, Zoe, passengers, [Simon, Book]]Certainly not what was intended.
s//----->\t/;$~="JAPH";s//\r<$~~/;{s|~$~-|-~$~|||s
|-$~~|$~~-|||s,<$~~,<~$~,,s,~$~>,$~~>,,
$|=1,select$,,$,,$,,1e-1;print;redo}
| [reply] [d/l] [select] |
The word prefix is still throwing me. I think a better term would be predicate.
I personally believe that it won't and I can't understand why it's throwing you, given that it's the correct technical term. In Perl 6 you can actually declare prefix, postfix, circumfix, etc. operators, which are basically regular functions.
Again, the notation you propose would be ambiguous.
It was just a very wild shot at it, to explain the kind of beast I "want," not a possible description of the beast. Actually I pointed out it couldn't be, for a well defined reason. That's why I'm asking here.
In your example: my $href = \% <== foo => 1, bar => 2; That could either mean a hash whose first key is a hashref 'foo' or a reference to a hash with one key 'foo' followed by the comma operator and a two element list ( bar, '2' ). Although in the case provided it may be clear what you intended, the ambiguity increases if one were to attempt to nest operators:
I call that an ordinary precedence issue, (except that I didn't specify the precedence of the operator nor do I have any precise idea about it) to be resolved with the use of parens when not doing the right thing without them.
| [reply] [d/l] [select] |