我在下面的代码中获取文件的用户,组和权限。
use File::stat;
my $filename = "/home/chetanv/filecheck";
my $mode = (stat($filename));
my $user = getpwuid(@$mode[4]);
my $group = getgrgid(@$mode[5]);
printf "Permission : %04o\n", @$mode[2] & 07777;
print "User : $user\n";
print "Group : $group\n";
相同的输出:
Permission : 0777
User : chetanv
Group : wheel
由于我使用printf语句,因此以下行工作正常
printf "Permission : %04o\n", @$mode[2] & 07777;
现在,如果我尝试将其分配给变量以供将来使用,我将无法执行此操作。我尝试过这样的事情:
my $mode = (stat($filename));
my $perm = "%04o\n", @$mode[2] & 07777;
my $user = getpwuid(@$mode[4]);
my $group = getgrgid(@$mode[5]);
print "Perm : $perm\n";
print "User : $user\n";
print "Group : $group\n";
它说,
Useless use of bitwise and (&) in void context
有人可以帮助我如何将权限输出分配给变量并稍后使用变量
答案 0 :(得分:4)
my $perm = "%04o\n", @$mode[2] & 07777;
您在这里错过了一个sprintf
通话。在上面的示例中,您有printf
,用于格式化和打印。如果只想格式化和分配,则必须使用sprintf
。这将使错误消失。
此外,由于您正在使用File::stat,因此您的stat
调用返回一个对象。您不应该使用底层的数组结构,而应该使用访问器。
my $stat = stat $filename;
my $perm = sprintf "%04o\n", $stat->mode & 07777;
请注意我也是如何将其重命名为$stat
的,因为该对象包含有关该文件的stat
调用的所有信息,而不仅仅是模式。您可以在整个程序中使用它以提高可读性。