Jim wrote: > I've never encountered this before but I have to be doing something > wrong. > > snippet of code: > > ]$ perl -e ' > > $var = "Company Online (Company Systems) NETBLK-COM-5BLK > > (NET-24-256-0-0-1)"; $var =~ /.*? \(.*\) (.*?) \(.*?\)/; > > print $1,"\n"; > > > > $var = "NetBlock: NETBLK-10H-6BLK"; > > $var =~ /sdddd\(.*?\) (.*?) \(.*?\)/; > > print $1,"\n"; > > ' > NETBLK-COM-5BLK > NETBLK-COM-5BLK > > > Why isn't $1 getting updated with the next implicit match? It should > fail but its returning the first $1 match. I can't unset $1 because > it is a read-only variable. This doesn't even work if I change the > second $var to $var2 because of course $1 is the same the way through. > > VERY frustrating.
This is the way the $1, $2, etc. variables work. They are only set if there is a successful match. Otherwise, they simply retain whatever previous value they had. You either need to test that the match worked: if (/(\w+)/) { # $1 is now set print $1; } Or, evaluate the match in list context: my ($word) = /(\w+)/; # $word will be undef if no match -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]