以下简单的Perl脚本将列出目录的内容,并将该目录列为脚本的参数。如何在Linux系统上捕获权限被拒绝的错误?目前,如果此脚本在用户没有读取权限的目录上运行,则终端中没有任何操作。
#!/bin/env perl
use strict;
use warnings;
sub print_dir {
foreach ( glob "@_/*" )
{print "$_\n"};
}
print_dir @ARGV
答案 0 :(得分:5)
glob
函数没有太多的错误控制,除非在最后一个glob失败时设置了$!
:
glob "A/*"; # No read permission for A => "Permission denied"
print "Error globbing A: $!\n" if ($!);
如果glob稍后成功找到某些内容,则不会设置$!
。例如,glob "*/*"
即使无法列出目录的内容,也不会报告错误。
标准File::Glob
模块中的bsd_glob
函数允许设置标志以启用可靠的错误报告:
use File::Glob qw(bsd_glob);
bsd_glob("*/*", File::Glob::GLOB_ERR);
print "Error globbing: $!\n" if (File::Glob::GLOB_ERROR);
答案 1 :(得分:0)
使用File :: Find,它是一个核心模块,能够控制文件中的所有内容。
#!perl
use 5.10.0;
use strict;
use warnings;
use File::Find;
find {
wanted => sub {
return if not -r $_; # skip if not readable
say $_;
},
no_chdir => 1,
}, @ARGV;