Mumia W. wrote: > > That happens because the match variables ($1, $2, ...) are only changed > when a regular expression matches; otherwise, they are left alone. > > In the first case, "$2 !~ /domain\.com/" succeeds but does not capture > anything, so the numbered match variables are unset. > > Your situation reinforces the rule that you should always test if the > match succeeded before you attempt to use the match variables: > > my $email = '[EMAIL PROTECTED]'; > my @f = (undef, $email =~ /(.*)\@(.*)/);
Why did you put undef in there? It serves no useful purpose other than making the code harder to understand for beginners. my @f = $email =~ /(.*)\@(.*)/; > (@f > 1) && ($f[2] =~ /domain\.com/ ? > print "$f[1]\n" : print "var 2 is bad\n" ); > > The test "@f > 1" is my way of testing if the match succeeded. The rvalue conditional operator should use the returned value: print @f > 1 && $f[ 2 ] =~ /domain\.com/ ? $f[ 1 ] : 'var 2 is bad', "\n"; John -- Perl isn't a toolbox, but a small machine shop where you can special-order certain sorts of tools at low cost and in short order. -- Larry Wall -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/