PERL Conditions
Placed in () when used with if, while, etc...
Any expression is considered true as
long as it does not evaluate to the null string ("") or 0 or "0".
Common:
http://www.perldoc.com/perl5.6/pod/perlop.html
Relational Operators
-
<
-
Returns true if the left argument is numerically less than the right argument.
-
>
-
Returns true if the left argument is numerically greater than the right argument.
-
<=
-
Returns true if the left argument is numerically less than or equal to the
right argument.
-
>=
-
Returns true if the left argument is numerically greater than or equal to
the right argument.
-
lt
-
Returns true if the left argument is stringwise less than the right argument.
-
gt
-
Returns true if the left argument is stringwise greater than the right argument.
-
le
-
Returns true if the left argument is stringwise less than or equal to the
right argument.
-
ge
-
Returns true if the left argument is stringwise greater than or equal to
the right argument.
Equality Operators
-
==
-
Returns true if the left argument is numerically equal to the right argument.
Compares the length when used with strings (use eq)
-
!=
-
Returns true if the left argument is numerically not equal to the right argument.
-
<=>
-
Returns -1, 0, or 1 depending on whether the left argument is numerically
less than, equal to, or greater than the right argument. Often used with
Sort.
-
eq
-
Returns true if the left argument is stringwise equal to the right argument.
-
ne
-
Returns true if the left argument is stringwise not equal to the right argument.
-
cmp
-
returns -1, 0, or 1 depending on whether the left argument is stringwise
less than, equal to, or greater than the right argument. Often used with
Sort
-
! or not
-
Logical Not. The not form has a lower precedent and is therefor "safer"
-
&& or and
-
Logical AND. Short circuit. The and form has a lower precendent and
is therefor "safer"
-
|| or or
-
Logical OR. The or form has a lower precendent and is therefor "safer".
Short circuit evaluation applies; as in: open(IN, "infile.txt") or die "can't
open"; where the die doesn't happen unless the open returns 0. (neat huh?)
Also $foo = $bar or $this or $that; will return the first of $bar, $this,
or $that which contain a value.
``lt'', ``le'', ``ge'', ``gt'' and ``cmp'' use the collation (sort) order
specified by the current locale if use locale is in effect. See the perllocale
manpage.
File-test operators
http://www.perldoc.com/perl5.6/pod/func/X.html
-
-e filename
-
Test for the existance of a file or directory
-
-r
-
File is readable
-
-w
-
File is writable
-
-x
-
File is executable
-
-o
-
File is owned by effective uid.
-
-z
-
File has zero size.
-
-s
-
File has nonzero size (returns size).
-
-f
-
File is a plain file.
-
-d
-
File is a directory.
-
-M
-
Modified. Age of file in days when script started. e.g. if (-M $src <=
-M $dest) {print "Backup already up to date";}
-
-A
-
Accessed. Same for access time.
-
-C
-
Created. Same for inode change time.
Example:
while (<>) {
chop;
next unless -f $_; # ignore specials
#...
}
Example:
print "Can do.\n" if -r $a || -w _ || -x _;
stat($filename);
print "Readable\n" if -r _;
print "Writable\n" if -w _;
print "Executable\n" if -x _;
See also:
Uppercase operators (e.g. EQ instead of eq) used to be ok, but they aren't anymore. They cause "bareword found where operator expected" errors as of perl version 5.