Re: String to array problem
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?
Re: String to array problem
$ 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. On Sun, Jul 16, 2017 at 6:03 PM, ToddAndMargo wrote: > On 07/16/2017 06:01 PM, Brandon Allbery wrote: > >> Once again: http://www.mail-archive.com/perl6-users@perl.org/msg03986.ht >> ml >> >> It includes a Grammar that supports arbitrarily nested quotes, which >> can't be done in a plain regex: you could maybe handle one level, but not >> nesting. >> > > I understand now. > > I was only after one level. > > Thank you! > > -T >
RE: String to array problem
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 -Original Message- From: ToddAndMargo [mailto:toddandma...@zoho.com] Sent: Sunday, July 16, 2017 8:35 PM To: perl6-users 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 > 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: $ 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"; ls -al \"Program Files\" \"Moe Curly Larry\" @y: $y[0] = What did I do wrong? -- ~~ Computers are like air conditioners. They malfunction when you open windows ~~
RE: String to array problem
T, Disclaimer: P6 newbie/P5 intermediate -YMMV Regex that looks (1) quoted strings (2) any non-space-chars: / [ '"' <-[ " ]> * '"' | \S+ ] Smartmatch globally when comparing with $x $x ~~ m:global Since regex matches return Match object, they need their match string coerced out with '~'. ~( ); Mark -Original Message- From: ToddAndMargo [mailto:toddandma...@zoho.com] Sent: Sunday, July 16, 2017 8:26 PM To: perl6-users Subject: Re: String to array problem > -Original Message- > From: ToddAndMargo [mailto:toddandma...@zoho.com] > Sent: Sunday, July 16, 2017 7:41 PM > To: perl6-users > 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 > On 07/16/2017 05:16 PM, Mark Devine wrote: > T, > > my $x = 'ls -al "Program Files" "Moe Curly Larry"'; > ~($x ~~ m:global/ [ > '"' <-[ " ]> * '"' | \S+ ] /); > > Mark Devine > Thank you! May I impose on you to take apart the example and explain what each part is doing? -- ~~ Computers are like air conditioners. They malfunction when you open windows ~~
RE: String to array problem
T, This regex seems to work in both cases: m:global/ [ \\? '"' <-[ " ]> * \\? '"' | \S+ ] /; #!/usr/bin/env perl6 use v6; my ($x, @y); $x = 'ls -al "Program Files" "Moe Curly Larry"'; @y = $x ~~ m:global/ [ \\? '"' <-[ " ]> * \\? '"' | \S+ ] /; for @y -> $match { say ~$match; } $x = 'ls -al \"Program Files\" \"Moe Curly Larry\"'; @y = $x ~~ m:global/ [ \\? '"' <-[ " ]> * \\? '"' | \S+ ] /; for @y -> $match { say ~$match; } Mark -Original Message- From: ToddAndMargo [mailto:toddandma...@zoho.com] Sent: Sunday, July 16, 2017 8:35 PM To: perl6-users 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 > 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: $ 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"; ls -al \"Program Files\" \"Moe Curly Larry\" @y: $y[0] = What did I do wrong? -- ~~ Computers are like air conditioners. They malfunction when you open windows ~~
Re: String to array problem
On 07/16/2017 06:01 PM, Brandon Allbery wrote: Once again: http://www.mail-archive.com/perl6-users@perl.org/msg03986.html It includes a Grammar that supports arbitrarily nested quotes, which can't be done in a plain regex: you could maybe handle one level, but not nesting. I understand now. I was only after one level. Thank you! -T
Re: String to array problem
Once again: http://www.mail-archive.com/perl6-users@perl.org/msg03986.html It includes a Grammar that supports arbitrarily nested quotes, which can't be done in a plain regex: you could maybe handle one level, but not nesting. On Sun, Jul 16, 2017 at 8:59 PM, ToddAndMargo wrote: > On 07/16/2017 05:57 PM, Brandon Allbery wrote: > >> 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. >> > > Creating a new grammer? > -- brandon s allbery kf8nh sine nomine associates allber...@gmail.com ballb...@sinenomine.net unix, openafs, kerberos, infrastructure, xmonadhttp://sinenomine.net
Re: String to array problem
On 07/16/2017 05:57 PM, Brandon Allbery wrote: 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. Creating a new grammer?
Re: String to array problem
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 wrote: > > -Original Message- >> From: ToddAndMargo [mailto:toddandma...@zoho.com] >> Sent: Sunday, July 16, 2017 8:35 PM >> To: perl6-users >> 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 >>> 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: >> >> >> $ 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"; >> >> >> ls -al \"Program Files\" \"Moe Curly Larry\" >> @y: >> $y[0] = >> >> >> 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! > > > #! /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"; > > > > $./QuoteArrayTest.pl6 > > ls -al "Program Files" "Moe Curly Larry" > @y: > $y[0] = > $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, xmonadhttp://sinenomine.net
Re: String to array problem
-Original Message- From: ToddAndMargo [mailto:toddandma...@zoho.com] Sent: Sunday, July 16, 2017 8:35 PM To: perl6-users 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 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: $ 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"; ls -al \"Program Files\" \"Moe Curly Larry\" @y: $y[0] = What did I do wrong? On 07/16/2017 05:53 PM, Mark Devine wrote: > T, > > This regex seems to work in both cases: m:global/ [ \\? '"' <-[ " ]> * \\? '"' | \S+ ] /; > > #!/usr/bin/env perl6 > use v6; > > my ($x, @y); > > $x = 'ls -al "Program Files" "Moe Curly Larry"'; > @y = $x ~~ m:global/ [ \\? '"' <-[ " ]> * \\? '"' | \S+ ] /; > for @y -> $match { say ~$match; } > > $x = 'ls -al \"Program Files\" \"Moe Curly Larry\"'; > @y = $x ~~ m:global/ [ \\? '"' <-[ " ]> * \\? '"' | \S+ ] /; > for @y -> $match { say ~$match; } > > Mark > Brain teaser. Thank you again!
Re: String to array problem
-Original Message- From: ToddAndMargo [mailto:toddandma...@zoho.com] Sent: Sunday, July 16, 2017 8:35 PM To: perl6-users 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 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: $ 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"; ls -al \"Program Files\" \"Moe Curly Larry\" @y: $y[0] = 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! #! /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"; $./QuoteArrayTest.pl6 ls -al "Program Files" "Moe Curly Larry" @y: $y[0] = $y[1] = <-al> $y[2] = <"Program Files"> $y[3] = <"Moe Curly Larry">
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 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: $ 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"; ls -al \"Program Files\" \"Moe Curly Larry\" @y: $y[0] = What did I do wrong? -- ~~ Computers are like air conditioners. They malfunction when you open windows ~~
RE: String to array problem
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 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
Re: String to array problem
-Original Message- From: ToddAndMargo [mailto:toddandma...@zoho.com] Sent: Sunday, July 16, 2017 7:41 PM To: perl6-users 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 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 > Thank you! May I impose on you to take apart the example and explain what each part is doing? -- ~~ Computers are like air conditioners. They malfunction when you open windows ~~
Re: String to array problem
On Sun, Jul 16, 2017 at 7:41 PM, ToddAndMargo wrote: > 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'; > This was just discussed a few days ago, under the subject "Is there a bash/shlex-like processor with double-quotes handling?" http://www.mail-archive.com/perl6-users@perl.org/msg03986.html -- brandon s allbery kf8nh sine nomine associates allber...@gmail.com ballb...@sinenomine.net unix, openafs, kerberos, infrastructure, xmonadhttp://sinenomine.net
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