Nested quotes and escapes are handled by the Grammar-based solution I
pointed to. You can't handle them in general with a simple regex.

On Sun, Jul 16, 2017 at 8:54 PM, ToddAndMargo <toddandma...@zoho.com> wrote:

>
> -----Original Message-----
>> From: ToddAndMargo [mailto:toddandma...@zoho.com]
>> Sent: Sunday, July 16, 2017 8:35 PM
>> To: perl6-users <perl6-users@perl.org>
>> Subject: Re: String to array problem
>>
>> On 07/16/2017 05:16 PM, Mark Devine wrote:
>>
>>> T,
>>>
>>> my $x = 'ls -al "Program Files" "Moe Curly Larry"'; my @y = ~($x ~~
>>> m:global/ [ '"' <-[ " ]> * '"' | \S+ ] /);
>>>
>>> Mark Devine
>>>
>>> -----Original Message-----
>>> From: ToddAndMargo [mailto:toddandma...@zoho.com]
>>> Sent: Sunday, July 16, 2017 7:41 PM
>>> To: perl6-users <perl6-users@perl.org>
>>> Subject: String to array problem
>>>
>>> Hi All,
>>>
>>> I have been scratching my head trying to figure out how to turn a string
>>> with quotes in it into an array.
>>>
>>> my $x='ls -al "Program Files" "Moe Curly Larry"';
>>>
>>> Desired result:
>>> my @y;
>>>       $y[0] = 'ls';
>>>       $y[1] = '-la';
>>>       $y[2] = 'Program Files';
>>>       $y[3] = 'Moe Curly Larry';
>>>
>>> Any words of wisdom?
>>>
>>> Many thanks,
>>> -T
>>>
>>>
>>
>> It kinda, sorta doesn't work:
>>
>> <code>
>> $ cat ./QuoteArrayTest.pl6
>> #! /usr/bin/env perl6
>>
>> use strict;
>>
>> print "\n";
>> my $x = 'ls -al \"Program Files\" \"Moe Curly Larry\"'; my @y =~($x ~~
>> m:global/ [ '"' <-[ " ]> * '"' | \S+ ] /); say "$x\n\@y:";
>>
>> for @y.kv -> $index, $value { say "\$y[$index] = <$value>"; } print "\n";
>> </code>
>>
>> ls -al \"Program Files\" \"Moe Curly Larry\"
>> @y:
>> $y[0] = <ls -al \"Program Files\" \"Moe Curly Larry\">
>>
>>
>> What did I do wrong?
>>
>
>
> On 07/16/2017 05:50 PM, Mark Devine wrote:
> > T,
> >
> > Sorry (newbie, remember).  For the first question that did not have
> backslash double-quotes:
> >
> > my ($x, @y);
> > $x = 'ls -al "Program Files" "Moe Curly Larry"';
> > @y = $x ~~ m:global/ [ '"' <-[ " ]> * '"' | \S+ ] /;
> > for @y -> $match { say ~$match; }
> >
> > Don't know about the second question with backslash double-quotes.
> >
> > Mark
>
>
> That worked.  Thank you!
>
> <code>
> #! /usr/bin/env perl6
>
> use strict;
>
> print "\n";
> my $x = 'ls -al "Program Files" "Moe Curly Larry"';
> my @y = $x ~~ m:global/ [ '"' <-[ " ]> * '"' | \S+ ] /;
> say "$x\n\@y:";
>
> for @y.kv -> $index, $value { say "\$y[$index] = <$value>"; }
> print "\n";
> </code>
>
>
> $./QuoteArrayTest.pl6
>
> ls -al "Program Files" "Moe Curly Larry"
> @y:
> $y[0] = <ls>
> $y[1] = <-al>
>
> $y[2] = <"Program Files">
> $y[3] = <"Moe Curly Larry">
>



-- 
brandon s allbery kf8nh                               sine nomine associates
allber...@gmail.com                                  ballb...@sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net

Reply via email to