Checking File Attributes in Perl
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? |