I have been using perl for quite some time now. I have also been using the file handling logic in my scripts. However, what I did not know till now is that you can quickly check for certain file properties in perl. Here is an example:
#!/usr/bin/perl
my (@description,$size);
if (-e $file)
{
push @description, ‘binary’ if (-B _);
push @description, ‘a socket’ if (-S _);
push @description, ‘a text file’ if (-T _);
push @description, ‘a block special file’ if (-b _);
push @description, ‘a character special file’ if (-c _);
push @description, ‘a directory’ if (-d _);
push @description, ‘executable’ if (-x _);
push @description, (($size = -s _)) ? “$size bytes” : ‘empty’;
print “$file is “, join(‘, ‘,@description),”\n”;
}
Nice, isn’t it?
Here is the complete list of features that you can check:
|
Operator |
Description |
|
-A |
Age of file (at script startup) in days since modification. |
|
-B |
Is it a binary file? |
|
-C |
Age of file (at script startup) in days since modification. |
|
-M |
Age of file (at script startup) in days since modification. |
|
-O |
Is the file owned by the real user ID? |
|
-R |
Is the file readable by the real user ID or real group? |
|
-S |
Is the file a socket? |
|
-T |
Is it a text file? |
|
-W |
Is the file writable by the real user ID or real group? |
|
-X |
Is the file executable by the real user ID or real group? |
|
-b |
Is it a block special file? |
|
-c |
Is it a character special file? |
|
-d |
Is the file a directory? |
|
-e |
Does the file exist? |
|
-f |
Is it a plain file? |
|
-g |
Does the file have the setgid bit set? |
|
-k |
Does the file have the sticky bit set? |
|
-l |
Is the file a symbolic link? |
|
-o |
Is the file owned by the effective user ID? |
|
-p |
Is the file a named pipe? |
|
-r |
Is the file readable by the effective user or group ID? |
|
-s |
Returns the size of the file, zero size = empty file. |
|
-t |
Is the filehandle opened by a TTY (terminal)? |
|
-u |
Does the file have the setuid bit set? |
|
-w |
Is the file writable by the effective user or group ID? |
|
-x |
Is the file executable by the effective user or group ID? |
|
-z |
Is the file size zero? |