I'am an avid user of 'strict' however yesterday it cost me a lot of time. Was debugging a program, that distilled to the essentials, looks like:
#!/usr/bin/perl -w use strict; my $a = "foo"; my $b = "bar"; my $c = undef; if ( $a =~ m/aa/ ) { } elsif ( $a =~ m/bb/ ) { } elsif ( $b =~ m/aa/ ) { } elsif ( $c =~ m/aa/ ) { } else { }
Run this and Perl will issue the warning:
that is, it claims there is something wrong withUse of uninitialized value in pattern match (m//) at ff.pl line 8
if ( $a =~ m/aa/ ) {
Of course in the actual code this was a _much_ more complex expressions with several variables. So I spent a lot of time studying the expression and find out what was wrong.
It turned out there is nothing wrong with the expression! The actual mistake is in:
elsif ( $c =~ m/aa/ ) {
but Perl reports it at the first if.
Just thought I share this so others can avoid doing the same.
Have fun.
2005-12-08 Retitled by g0n, as per Monastery guidelines
Original title: 'Confusing warning'
Back to
Meditations