In a Perl program all kinds of things can go wrong and if you don't use warnings then you might not even know about it.

Take this examples that has a programming mistake. Perl would generate a readline() on closed filehandle warning if warnings were enabled helping you locate the problem, but it would silently and probably incorrectly(!) work without the warnings.

Not checking if 'open' was successful

There are several programming issues in the following examples:

examples/try_to_read_log_file.pl

use strict;
#use warnings;

my $filename = '/tmp/application.conf';

open(F, "<$filename");
while(<F>) {
   # do something with $_
}
close F;

If we run this script it will run silently regardless of the existence of the file /tmp/application.conf it tries to read.

If we turn on use warnings as recommended then, if the file we are trying to open does not exists we'll get a run-time warning:

readline() on closed filehandle F at ...

The real problem of this code is that we don't check the return value of open.

The recommended way to open a file is to either write

open ... or die ...

or to write

if (open ...) {

}

but in this case the author have forgotten to protect the code in case the file is missing or cannot be read for some other reason.

The solution is to use either of the above construct.

There is another issue of opening the file in the old way instead of the recommended 3-argument open, but the main issue is the lack of error checking.

Conclusion

Always use strict and always use warnings.

They can protect you from certain programming mistakes.