print "Enter filename to test:";
my $filename=<>;
chomp $filename;
if(lstat $filename)
{
print "$filename is a file \n" if -f _;
print "$filename is a directory \n" if -d _;
print "$filename is readable \n" if -r _;
print "$filename is writeable \n" if -w _;
print "$filename is a link \n" if -l _;
print "$filename is executable \n" if -x _;
}
else
{
print "$filename does not exist\n";
}
使用stat对象
访问stat所返回的值不是很方便,我们必须要记得返回的列表中的值,而且程序的可读性差,因为引入了File::stat模块.
#!/usr/bin/perl
use warnings;
use strict;
use File::stat;
print "Enter filename:";
my $filename=<>;
chomp $filename;
if(my $stat=stat $filename)
{
print "$filename is ",$stat->size,"bytes and occupies",$stat->blksize*$stat->blocks,"bytes of disc space\n";
}
else
{
print "Cann't stat $filename:$|\n";
}
这样就方便多了。
在此我们可以添加一个::FIELDS导入列表到程序中,这样使用最后一次调用的stat所得的结果只要将名称前加st_前缀就行了。
如:
#!/usr/bin/perl
use warnings;
use strict;
use File::stat qw(:FIELDS);
print "Enter filename:";
my $filename=<>;
chomp $filename;
if(my $stat=stat $filename)
{
print "$filename is ",$st_size,"bytes and occupies",$st_blksize*$st_blocks,"bytes of disc space\n";
}
else
{
print "Cann't stat $filename:$|\n";
}
如果想使用stat的初始版本,可以用CORE::
use File::stat;
……………………
@new_stat=stat $filename;
@old_stat=CORE::stat $filename;