While these file tests are fine for testing various attributes regarding a particular file or filehandle, they don't tell the whole story. For example, there's no file test that returns the number of links to a file. To get at the remaining information about a file, merely call the
stat function, which returns pretty much everything that the
stat POSIX system call returns (hopefully more than you want to know).
The operand to
stat is a filehandle or an expression that evaluates to a filename. The return value is either
undef, indicating that the stat failed, or a 13-element list, most easily described using the following list of scalar variables:
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev, $size,$atime,$mtime,$ctime,$blksize,$blocks) = stat(...)
 If you have a hard time remembering the order of
stat's return values, you might look at the File::stat module, first introduced in release 5.004 of Perl. It provides access such as:$file_owner = stat($filename)->uid;
The names here refer to the parts of the stat structure, described in detail in your stat (2) manpage. You should probably look there for the detailed descriptions.
($uid, $gid) = (stat("/etc/passwd"))[4,5];
And that's the way it goes.
stat function on the name of a symbolic link returns information on what a symbolic link points at, not information about the symbolic link itself (unless the link just happens to be pointing at nothing currently accessible). If you need the (mostly useless) information about the symbolic link itself, use
lstat rather than
stat (which returns the same information in the same order). The
lstat function works like
stat on things that aren't symbolic links.
Like the file tests, the operand of
lstat defaults to
$_ , meaning that the stat will be performed on the file named by the scalar variable