> -----Original Message----- > From: Pedro Antonio Reche [mailto:[EMAIL PROTECTED]] > Sent: Tuesday, December 17, 2002 7:22 PM > To: [EMAIL PROTECTED] > Subject: help parsing file > > > ... I am not > please with it, as it generates an empty element in the hash from the > header of the file
John Krahn's code corrects a problem with your code. You write: $_ =~ /product=\"(.+)\"/; $gname = $1; But what if the regex failed to match? Rather than $1 having an undef value, it would have whatever value it previously held. This could be a major problem. Never use the $1,$2,$3 variables without checking that the regex matched. John's construct, my ($gname) = /product="([^"]+)"/; solves this problem. If the regex fails to match, $gname will be guaranteed to be undef. As far as the empty element you're getting at the start, you can do a couple of things: 1) do a read before entering your loop to skip over the "header" data: <>; # skip header while(<>) { ... 2) the data you're interested in seems to start with "complement" following "CDS", while the header data doesn't. So you could skip data that doesn't have "complement": while(<>) { next unless /\s*complement/; # skip header ... HTH -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]