Jen Spinney wrote:
>
> I apologize in advance for not posting a complete sample script that
> shows my problem, but I can't isolate it outside of my (rather large)
> perl application.
>
> My problem is that I'm hit with a barrage of warnings that tell me I'm
> using uninitialized values.  The first warning that occurs complains
> of a "use of uninitialized value in string eq" at line 505 of my
> script.  Line 505 (I've triple-checked the line number and the correct
> source) reads:
>
> if ($exploit_name eq 'ALL') # <-- line 505
>
> I had no idea how $exploit_name could be undefined, so I added the
> following two statements right before the if statement:
>
> print "\$exploit_name is not any sort of false\n" if $exploit_name;
> print "String literal is not any sort of false\n" if 'ALL';
> if ($exploit_name eq 'ALL') # <-- now line 507
>
> I originally only check if the two strings were defined, but then I
> read in perldiag that "An undefined value was used as if it were
> already defined. It was interpreted as a "" or a 0, but maybe it was a
> mistake. To suppress this warning assign a defined value to your
> variables."  So, to be safe, I verified that neither $exploit_name nor
> 'ALL' could be any kind of false value.
>
> But still, this is my output:
>
> $exploit_name is not any sort of false
> String literal is not any sort of false
> [*] WARNING: Use of uninitialized value in string eq at spinsploit.pl
> line 507, <STDIN> line 2.
>
> The '[*] WARNING: " bit comes from a module I'm using, which catches
> SIG{__WARN__} and just prepends that string.  I stepped through the
> module's warning catcher with the debugger, and it was definitely sent
> "Use of uninitialized value in string eq at spinsploit.pl line 507,
> <STDIN> line 2." as a $_[0] value.  I don't see how it could affect
> the warning it was sent.
>
> How is this possible?  Any suggestions of other tests I could print
> the output of or things to step through with the debugger?

You're printing output only if $exploit_name is defined. Suppose this line is
executed twice, the first time the variable is defined and the second it is not.
You will then get exactly the output you show. Write this:

die "\$exploit_name undefined" unless defined $exploit_name;
print "\$exploit_name = |$exploit_name|\n";

before your line 505 and things will be a little clearer.

HTH,

Rob



--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to