http://qs1969.pair.com?node_id=515186

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:

Use of uninitialized value in pattern match (m//) at ff.pl line 8
that is, it claims there is something wrong with
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'