To check if string is empty use eq
. To check if it has only spaces
or only white space in it, use a regex.
Is the string empty?
if ($str eq '') {
print "String is empty.";
}
That would work, but if use warnings;
is in effect, as it should be,
then you might get a Use of uninitialized value warnings if $str
is undef. So it might
be better to check this too, before any other comparison:
if (not defined $str) {
print "String is so empty, it is not even defined.";
}
and to do the other comparisons only if $str
is defined.
Has the string only spaces in it?
if ($str =~ /^ *$/) {
print "String contains 0 or more spaces and nothing else.";
}
Has the string only white-spaces in it?
if ($str =~ /^\s*$/) {
print "String contains 0 or more white-space character and nothing else.";
}
A white-space character can be a space, a tab, and a few other characters that
normally we cannot see. The >^
at the beginning of the regex means
"match at the beginning of the string".
The $
at the end of the regex means "match at the end of the string".
*
in the regex is a quantifier. It means match 0 or more times the thing
that is on its left hand side. In the previous regex there was a space in on the left hand side
of the *
. In the second regex we have \s
in front of the
*
\s matches any on of the following 5 characters:
-
space
-
tab (
\t
) -
carriage-return (
\r
) -
newline (
\n
) -
form-feed (`\f</hl)