[comp.lang.perl] bug in !~ returning array

phillips@cs.ubc.ca (George Phillips) (02/13/90)

It seems that when perl does the wrong thing when it executes the !~
operator and the evaluator expects it to return an array.  Running
perl -e 'print "foo" !~ /f/;' gives "1" while
perl -e 'print !("foo" !~ /f/);' gives "1" as well(!)

The following fragment from eval.c should do something to "NOT" the
array if gimme == G_ARRAY.

    case O_NMATCH:
	sp = do_match(str,arg,
	  gimme,arglast);
	if (gimme == G_ARRAY)
	    goto array_return; /* forgot to put the ! in !~ */
	str_sset(str, str_true(str) ? &str_no : &str_yes);
	STABSET(str);
	break;

I guess you could either set the number of elements to 0 if there are
any and set the number to 1 if there aren't.  Actually, does returning
an array for !~ make any sense?  False would be good enough if
you matched, but what do you return when you don't match?  A
partial match based on the longest substring that matched?

George Phillips phillips@cs.ubc.ca {alberta,uw-beaver,uunet}!ubc-cs!phillips
--
I told him that I was a flop with scripts
I've been this way since 1986
He stretched out his palm and he made a magic sign
He said "What you need, boy, is patch level #9"