in reply to Re^16: Experimental features: autoderef vs postfix deref
in thread Experimental features: autoderef vs postfix deref

Why 90% of people try to avoid circumfix when they can?

They're not "avoiding"; they just not adding what would be pointless.

Just as those in favour of postfix deref won't add: $foo->{bar}->{baz}->$* = 4;, because that would be equally pointless.

So, back to the real argument.

When explicit dereferencing is actually required, is push @{ $foo->{bar}{baz} }, 4;

Simpler, clearer, easier to scan and less ugly than push $foo->{bar}->{baz}->@*, 4;

And clearly the answer is yes. /c

Replies are listed 'Best First'.
Re^18: Experimental features: autoderef vs postfix deref
by Anonymous Monk on Jul 14, 2015 at 05:18 UTC
    Just as those in favour of postfix deref won't add: $foo->{bar}->{baz}->$* = 4;, because that would be equally pointless.
    :-) What would be pointful instead? (what is the equivalent but pointful expression?)

    So, back to the real argument.

    When explicit dereferencing is actually required, is push @{ $foo->{bar}{baz} }, 4;

    Simpler, clearer, easier to scan and less ugly than push $foo->{bar}->{baz}->@*, 4;

    Sure, just like
    $foo->{bar}{baz} = 4;
    is simpler, clearer, easier to scan and less ugly than
    ${ $foo->{bar} }{baz} = 4;
    just like
    $foo->{bar}{baz}->@[1, 2, 3] = (100, 200, 500);
    is simpler, clearer, easier to scan and less ugly than
    @{ $foo->{bar}{baz} }[1, 2, 3] = (100, 200, 500);
    just like
    $foo->{bar}{baz}->$* = 4;
    is simpler, clearer, easier to scan and less ugly than
    ${ $foo->{bar}{baz} } = 4;
    And I think no one is going to take push @{ stuff }, stuff away from you?

    Back to the real point

    Postderef is good for exactly the same reason that the existing -> operator is good. Most people prefer to read and write in one direction (such as left-to-right) rather than inside-out. Postderef syntax is especially good for slices - @{ $foo->{bar} }[1, 2, 3] is 'pointless' for the same reason that ${ $foo->{bar} }{baz} is 'pointless'. The reason is inside-out reading. I also don't see why it shouldn't work for the whole thing - you still get to read the expression left-to-right, so it's still just as good. If it works at all, it should work everywhere, including push, even if you some find it 'ugly' or 'pointless'.