On 03/13/2017 02:28 PM, Elizabeth Mattijsen wrote:
On 13 Mar 2017, at 22:20, ToddAndMargo <toddandma...@zoho.com> wrote:
On 03/13/2017 02:11 PM, Elizabeth Mattijsen wrote:
On 13 Mar 2017, at 22:06, ToddAndMargo <toddandma...@zoho.com> wrote:
$ 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
With out the "q" in this, it works. I deliberately put
the "q" to see what would happen when a patter was not
Is there a way around the "use of nil" finger wag
if a patter is not found?
The Nil is not caused by the smart match, but from your attempt to display the
first positional capture (aka $0) of a match that failed.
Or should I always test for its presence first if
there is a possibility the pattern might not exist?
You should test whether the smart match was successful.
my $x="ab12cd"; say "$x\n\$0=<$0>\n” if $x ~~ m/ab(1q2)cd/;
How would you do this if there were several matches in the line?
if $x ~~ m/(ab)(1q2)(cd)/;
Eventually break down an use .defined?
This is about the entire smart match, the result of the ~~ operator. Either it
returns true, and then everything is set in $/ (and it’s derived fields like
$<foo> if you’re using named captures). Or it returns false, and then nothing
is set, it’s all Nil.
So if it only catches some of them, it will still return false?
Computers are like air conditioners.
They malfunction when you open windows