It sounds like either use strict or use warnings (-w on the shebang line) is causing 
the error. If you add:

$found{$file}{1} = 0;
$found{$file}{2} = 0;

before the two if's, that should suppress the error message (hopefully).

        What I think was happening is that one of the strings never matched, and 
therefore either the {1} or the {2} did not get incremented at all. When the 
greater-than-or-equal ( >= ) tried to compare a variable that did not exsist, the 
'strict' or 'warning' gave an error. The fix above initializes each variable to zero, 
so hopefully this will satisfy 'strict' or 'warnings'.

        The gist of the last logic is to check each counter and if both are positive, 
we have a match (don't we?). So, we compare the first counter, $found{$file}{1} and 
check if it's >= to 1: ($found{$file}{1} >= 1). We do the same thing with the second 
counter: ($found{$file}{2} >= 1). Since you were looking for a match only if both 
strings were found, we want to make sure test1 and test2 above are true in our if 
statement: if ( (test1) && (test2) ) { code }. If both are true, we want to record the 
$file that matched, so we push the file name onto the @matches array: push(@matches, 
$file).

Hope this helps,

=-= Robert T.


On Wed, Jun 26, 2002 at 02:07:39PM +0200, David vd Geer Inhuur tbv IPlib wrote:
> 
> Hi Robert,
> 
> Looks good, but doens't work :)
> 
> The if-statements work fine within the while-loop.
> After that you do something I realy don't get and my perl either :)
> 
> It start complaining :
> Use of uninitialized value in numeric ge (>=) at /user/web/apache/cgi-bin/IPlib/1 
>line 88, <FILE> line 471
> 
> Any idea, what goes wrong ??
> Maybe you can give me a litlle more explenation ?? Hope you have the time for it.
> B.T.W. @matches is completely empty.
> 
> Regs David
> 
> # -----------------------
> 
> 
> > 
> > > So in short :
> > > I want to match 2 words within .txt documents, if the document contains BOTH 
>words I'dd like to print it.
> > 
> >     I am assuming you mean strings, whereas a word would be surrounded by space 
>ala: /\s$word\s/. To rephrase what you want a little, you want to track how many 
>times string one is found in a file, track how many times string two is found in the 
>same file, and keep the file only if both strings are found in the file.
> > 
> > while (<INFILE>) {
> >   if ($_ =~ /$string1/i) {
> >     ++$found{$file}{1};
> >   }
> > 
> >   if ($_ =~ /$string2/i) {
> >     ++$found{$file}{2};
> >   }
> > }
> > 
> > if ( ($found{$file}{1} >= 1) && ($found{$file}{2} >= 1) ) {
> >   push(@matches, $file);
> > }
> > 
> >     Each filename must be unique, since they are used as the keys for the hash.
> > 
> > 
> > =-= Robert T.

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to