[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Omaha.pm] Could you take a look
On Jan 19, 2007, at 7:18 AM, kiran bina wrote:
Could you please take a look at this.
<test.zip>
Hi again Kiran. :)
Your code (as viewed in the debugger):
DB<6> l 9-15
9: while (my $line=<IN1>)
10 {
11: if ($line=~ m/\>\s+/)
12 {
13: $line=~ m/^(\S+)\>\s(\S+)$/;
14==> my $read = $1;
15: my $value= $2;
Your first problem is that $line has carriage returns and/or newlines
at the end, so your regex demand that the line end with \S+ fails.
I'll step past the regex and show you the newlines:
main::(test.pl:
13): $line=~ m/^(\S+)\>\s(\S+)$/;
DB<1> n
main::(test.pl:14): my $read = $1;
DB<3> p "[$line]"
[a> APPLE
]
Now normally you could just 'chomp $line;', but that didn't work for
me on your data. Perhaps because my Mac defines newlines differently
than wherever you made your file? Even after I added chomp it still
wasn't working, so I x'd it in the debugger to see why not:
DB<3> x $line
0 "a> APPLE\cM"
Bummer. I believe "\r\n" (carriage return, linefeed) is interpreted
as Control-M, So I added a regex to remove all carriage returns and
linefeeds
$line =~ s/[\r\n]//g;
(chomp might work fine for you.)
The next annoyance was all these warnings:
Use of uninitialized value in string eq at test.pl line 43, <IN1>
line 5.
Which you can avoid by NOT running look_up_order() if there is no
$value. I don't know if that's what you wanted to do or not, but you
can do that with this line
next unless ($value); # No value in file...
So your code now reads like this:
while (my $line=<IN1>)
{
$line =~ s/[\r\n]//g;
if ($line=~ m/\>\s+/)
{
$line=~ m/^(\S+)\>\s(\S+)$/;
my $read = $1;
my $value= $2;
next unless ($value); # No value in file...
which seems to work?
$ perl test.pl
a
APPLE
b
BOY
d
DOG
?
Lower, your look_up_order() doesn't seem to do anything at all. Were
you wanting it to pull values out of File2 if File1 didn't have a
$value or something?
HTH,
j