On 03/13/2017 02:06 PM, ToddAndMargo wrote:
Hi All,

$ perl6 -e 'my $x="ab12cd"; $x ~~ m/ab(1q2)cd/; say "$x\n\$0=<$0>\n";'
Use of Nil in string context in block <unit> at -e line 1
ab12cd
$0=<>

With out the "q" in this, it works.  I deliberately put
the "q" to see what would happen when a patter was not
found.

Is there a way around the "use of nil" finger wag
if a patter is not found?

Or should I always test for its presence first if
there is a possibility the pattern might not exist?


Many thanks,
-T





Follow up.  My notes on matching:

Thank you all for the help!


Perl 6: Pattern Matching:

This Perl 5:
$ perl -e 'my $x="abc123def"; $x =~ m[(abc)(123)(def)]; print "$x\n\$1=<$1> \$2=<$2> \$3=<$3>\n";'

abc123def
$1=<abc>  $2=<123>  $3=<def>


Translates in Perl 6 to:
Note: Perl 5 starts counting at 1 and Perl 6 starts counting at 0


$ perl6 -e 'my $x="abc123def"; $x ~~ m/(abc)(123)(def)/; say "$x\n\$0=<$0> \$1=<$1> \$2=<$2>\n";'
abc123def
$0=<abc>  $1=<123>  $2=<def>


perl6 -e 'my $x="abc\(123\)def"; $x ~~ m/(abc)\((123)\)(def)/; say "$x\n\$0=<$0> \$1=<$1> \$2=<$2>\n";'
abc(123)def
$0=<abc>  $1=<123>  $2=<def>



ooops!  No match!
$ perl6 -e 'my $x="ab12cd"; $x ~~ m/ab(1q2)cd/; say "$x\n\$0=<$0>\n";'
Use of Nil in string context
  in block <unit> at -e line 1
ab12cd
$0=<>

This is because you are trying to print out undefined variables.
To work around this:
   Reverse:
perl6 -e 'my $x="ab12cd"; say "$x\n\$0=<$0>\n" if $x ~~ m/ab(1q2)cd/;'

   Forward:
perl6 -e 'my $x="ab12cd"; if $x ~~ m/ab(1q2)cd/ { say "$x\n\$0=<$0>\n"};'
Note: "ALL" matches have to be satisfied, or it will return "false"


pre-assigning variables, well sort of.  You can not assign an external
variable, like you can with a "for" loop.

Note: the name of the variable is $<a> not $a

perl6 -e 'my $x="ab12cd"; $x ~~ m/$<a>=(ab) $<b>=(12) $<c>=(cd)/; say "$x\n\$a=<$<a>>\t\$b=<$<b>>\t\$c=<$<c>>\n";'
ab12cd
$a=<ab>   $b=<12>   $c=<cd>


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

Reply via email to