On Sun, Jul 16, 2017 at 11:34 PM, ToddAndMargo <toddandma...@zoho.com <mailto:toddandma...@zoho.com>> wrote:

    On 07/16/2017 07:48 PM, Brent Laabs wrote:

        $ perl6
           > my $x='ls -al "Program Files" "Moe Curly Larry"';
        ls -al "Program Files" "Moe Curly Larry"
           > &EVAL( "qww<$x>" ).perl
        ("ls", "-al", "Program Files", "Moe Curly Larry")

        How about this?  Obligatory: Much EVAL, very danger wow.

    I don't understand.  Would you put this into a full executable example?

On 07/17/2017 02:08 AM, Brent Laabs wrote:
I would put it in an executable example, and I already did. But here's another one, if you like.

$ perl6 -e 'my $x = q<ls -al "Program Files" "Moe Curly Larry">; my @y = &EVAL( "qww<$x>"); for @y.kv -> $i, $j { say " \@y[$i] = \c39$j\c39" }'
   @y[0] = 'ls'
   @y[1] = '-al'
   @y[2] = 'Program Files'
   @y[3] = 'Moe Curly Larry'

The last loop is just so it's printed in the way you demonstrated in the first post.

The main point of me writing that example in the first place is because I know that the Perl 6 language itself is very good at parsing quotes. If you knew what the string was at compile time, you could just write this:
      my @y = qww<ls -al "Program Files" "Moe Curly Larry">;
And it would know exactly how to deal with the quotes. But I don't know how to access this functionality of the quote language from within the Perl 6 language. You can't use qqww directly, because the quote protection is handled before interpolation, and we want it to happen after. So I can eval a qww string instead, and that does work, though it does recognize kinds of quoting that you wouldn't expect, like dumb quotes or halfwidth katakana quotes.

All of this is to say that I wish the Str.words method had a way of applying Perl 6 quoting rules as if it were the qww operator.

Thank you!

Computers are like air conditioners.
They malfunction when you open windows

Reply via email to