note
haukex
<p>This post makes excellent points! Just to expand a little on regex testing - having many test cases helps:</p>
<c>
#!/usr/bin/env perl
use warnings;
use strict;
use Test::More;
#use re 'debug'; # optional
my $regex = qr/(foo|bar)(quz|baz)?$/;
# "match / doesn't match" tests
like "foo", $regex;
like "bar", $regex;
like "foobar", $regex;
like "fooquz", $regex;
like "foobaz", $regex;
like "barbaz", $regex;
like "foobarquz", $regex;
like "foobarfooquz", $regex;
unlike "foobarquzbaz", $regex;
unlike "quzbaz", $regex;
unlike "hello", $regex;
unlike "foo ", $regex;
# etc.
# check capture groups
ok "foobar" =~ $regex;
is $1, "bar";
is $2, undef;
ok "foobarquz" =~ $regex;
is $1, "bar";
is $2, "quz";
ok "foobaz" =~ $regex;
is $1, "foo";
is $2, "baz";
# etc.
# and/or check return values in list context
is_deeply [ "foobar" =~ $regex ],
[ "bar", undef ];
is_deeply [ "fooquz" =~ $regex ],
[ "foo", "quz" ];
is_deeply [ "barbaz" =~ $regex ],
[ "bar", "baz" ];
# etc.
# an example with /g return values
is_deeply [ "foobarquzbaz" =~ /[aeiou]/g ],
[ "o", "o", "a", "u", "a" ];
# same thing, written differently:
my @matches = "foobarquzbaz" =~ /[aeiou]/g;
is_deeply \@matches, [ "o", "o", "a", "u", "a" ];
done_testing;
</c>
1154672
1154672