Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re^4: Half-serious quest for prefix anonymous refs taking

by blazar (Canon)
on May 31, 2008 at 09:51 UTC ( #689409=note: print w/replies, xml ) Need Help??


in reply to Re^3: Half-serious quest for prefix anonymous refs taking
in thread Half-serious quest for prefix anonymous refs taking

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...)

--
If you can't understand the incipit, then please check the IPB Campaign.

Replies are listed 'Best First'.
Re^5: Half-serious quest for prefix anonymous refs taking
by starbolin (Hermit) on May 31, 2008 at 16:53 UTC

    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}
      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.

      --
      If you can't understand the incipit, then please check the IPB Campaign.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://689409]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (5)
As of 2018-06-19 05:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?



    Results (111 votes). Check out past polls.

    Notices?