Re: grep and smart match should warn in void context
authorMichael G. Schwern <schwern@pobox.com>
Sun, 23 Dec 2007 11:56:08 +0000 (03:56 -0800)
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>
Sun, 6 Jan 2008 17:14:22 +0000 (17:14 +0000)
Message-ID: <476EBD58.9050505@pobox.com>

p4raw-id: //depot/perl@32876

op.c
t/lib/warnings/op

diff --git a/op.c b/op.c
index 93a8bfd..212ecdd 100644 (file)
--- a/op.c
+++ b/op.c
@@ -941,6 +941,7 @@ Perl_scalarvoid(pTHX_ OP *o)
     case OP_GVSV:
     case OP_WANTARRAY:
     case OP_GV:
+    case OP_SMARTMATCH:
     case OP_PADSV:
     case OP_PADAV:
     case OP_PADHV:
@@ -969,6 +970,7 @@ Perl_scalarvoid(pTHX_ OP *o)
     case OP_ANONLIST:
     case OP_ANONHASH:
     case OP_SORT:
+    case OP_GREPWHILE:
     case OP_REVERSE:
     case OP_RANGE:
     case OP_FLIP:
@@ -1008,7 +1010,9 @@ Perl_scalarvoid(pTHX_ OP *o)
     case OP_PROTOTYPE:
       func_ops:
        if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)))
-           useless = OP_DESC(o);
+           /* Otherwise it's "Useless use of grep iterator" */
+           useless = (o->op_type == OP_GREPWHILE) ? "grep"
+                                                  : OP_DESC(o);
        break;
 
     case OP_NOT:
index a744590..c201a02 100644 (file)
@@ -211,6 +211,9 @@ eval { getgrgid 1 };        # OP_GGRGID
 eval { getpwnam 1 };   # OP_GPWNAM
 eval { getpwuid 1 };   # OP_GPWUID
 prototype "foo";       # OP_PROTOTYPE
+grep /42/, (1,2);      # OP_GREP
+$a ~~ $b;              # OP_SMARTMATCH
+$a <=> $b;             # OP_NCMP
 EXPECT
 Useless use of repeat (x) in void context at - line 3.
 Useless use of wantarray in void context at - line 5.
@@ -250,6 +253,9 @@ Useless use of getgrgid in void context at - line 51.
 Useless use of getpwnam in void context at - line 52.
 Useless use of getpwuid in void context at - line 53.
 Useless use of subroutine prototype in void context at - line 54.
+Useless use of grep in void context at - line 55.
+Useless use of smart match in void context at - line 56.
+Useless use of numeric comparison (<=>) in void context at - line 57.
 ########
 # op.c
 use warnings 'void' ; close STDIN ;