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:

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

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/;


Hi Liz,

Thank you!

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

Reply via email to