Just to make it clear, do not use EVAL() ever on untrusted user input.  In
the example I wrote, if the string contained a '>', anything after that
point would be executed.  While it works, it's a bad idea to use it.

On Mon, Jul 17, 2017 at 2:17 AM, ToddAndMargo <toddandma...@zoho.com> wrote:

> 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