This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix booleanness of regexps
authorFather Chrysostomos <sprout@cpan.org>
Sat, 10 Aug 2013 12:30:41 +0000 (05:30 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 11 Aug 2013 14:54:25 +0000 (07:54 -0700)
I broke this when I stopped regexps from being POK in 5.18.

sv.c
t/op/not.t

diff --git a/sv.c b/sv.c
index 198ae73..ec80261 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -3155,6 +3155,9 @@ Perl_sv_2bool_flags(pTHX_ SV *const sv, const I32 flags)
        }
        return SvRV(sv) != 0;
     }
+    if (isREGEXP(sv))
+       return
+         RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
 }
 
index 54de3b0..17f7a36 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
     require './test.pl';
 }
 
-plan tests => 23;
+plan tests => 24;
 
 # not() tests
 pass("logical negation of empty list") if not();
@@ -77,6 +77,9 @@ SKIP:
     is not($c), "", 'not(dualvar) ignores false int when string is true';
 }
 
+# test truth of regexps
+is not(${qr//}), "", 'dereferenced regexps are true';
+
 # not’s return value should be read-only, as it is the same global scalar
 # each time (and test that it is, too).
 *yes = \not 0;