strict can catch some really stupid errors (at compile time), like typos in your variable names. Or accidentally using symbolic references.
Warnings can catch things like variables that you forgot to initialize.
strict can keep you from doing some bad things, but doesn't prevent you from still writing bad code. It forces you to declare variables with, e.g. my or our or prefixing it with a package name. Variables are usually best declared in as narrow a scope as possible, so they're easy to keep track of, but prefixing a variable with a package name, e.g. main::myvariable, let's you go back down the dark path of having all globals and creating them off in hard to find included (require, do) files and modules, or declaring all of your variables with my at the top of your script.
Small scripts (ten lines? one page or less? one-liners? it's up to you) don't really need strict or warnings, but if something goes wrong that you can't figure out, it might be a good idea to turn them on as a first step.
If you submit chunks of code for our review here asking for help, and you obviously haven't used strict or warnings, it can be harder to guess at what the problem is.
Snippets of code should be wrapped in
<code> tags not<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).