我正在尝试一个示例程序来获取文件的用户模式。
#! /usr/bin/perl
use strict;
use warnings;
use File::stat;
my $file_name = 0;
my $info = 0;
my $ret_mode = 0;
foreach(@ARGV){
$file_name = $_;
$info = stat($file_name);
$ret_mode = $info->mode;
print "Before : $ret_mode\n";
$ret_mode = $ret_mode & 0777;
print "After : $ret_mode\n";
if($ret_mode & 070){
print "$file_name has Read,Write & Execute permission\n";
}
elsif($ret_mode & 060){
print "$file_name has Read and write permission\n";
}
elsif($ret_mode & 050){
print "$file_name has Read and execute permission\n";
}
elsif($ret_mode & 030){
print "$file_name has Write and Execute permission\n";
}
elsif($ret_mode & 020){
print "$file_name has Write permission\n";
}
elsif($ret_mode & 010){
print "$file_name has Execute Permission\n";
}
elsif($ret_mode & 040){
print "$file_name has Read Permission\n";
}
else{
#nothing;
}
$ret_mode = 0;
}
我尝试了一个示例程序来查找我作为参数提供的文件的用户权限。我不明白为什么 $ret_mode 必须和 0777(group,user and owner) 一起获得模式值。
上面的代码没有给我正确的权限。请帮助理解 $info->mode 包含的内容以及我们为什么需要和 0777。
编辑:
OUPUT :
angus@ubuntu~/ perl 5.pl 1.pl 2.pl
Before : 32784
After : 16
1.pl has Read and execute permission
Before : 33188
After : 420
i/p 文件 1.pl 和 2.pl 没有读取、执行和写入、执行权限。上面的程序输出错误的结果。
ls -l
-----w---- 1 angus angus 174 2013-08-16 00:33 1.pl
-rw-r--r-- 1 angus angus 455 2013-08-16 08:33 1.txt
-rw-r--r-- 1 angus angus 245 2013-08-16 02:10 2.pl