无法删除。和..使用grep?

时间:2013-06-07 12:32:20

标签: perl

我使用readdir获取目录的文件,但我想删除。和..使用grep。输出显示它仍然包含。和..,但我无法弄清楚它有什么问题?

这是我的代码

    #!/usr/bin/perl

    opendir(Dir,$ARGV[0]);
    @Dirs = readdir(Dir);
    @Dirs = grep { $_ != /./ } @Dirs;
#   @Dirs = grep { $_ =~ /^./ } @Dirs;
    print join("\n",@Dirs);

由于

3 个答案:

答案 0 :(得分:9)

我强烈建议您注意以下内容

  • 总是 use strictuse warnings,即使是最微小的代码。他们会在

  • 上多次给你额外的打字时间
  • 始终使用词法目录句柄和文件句柄。这样的全球手柄就是这样的 现在错误选择了十二年

  • 始终检查文件和目录open调用是否成功,并使用包含die变量的$!字符串来表示为什么开放失败

  • 对局部变量名使用小写字母和下划线。对于全局项目(如包名称和内置变量

  • ),大写是按惯例保留的
  • 使用print "$_\n" for @array代替print join "\n", @array因为 a)使用join生成数组中文本的第二个副本并浪费空间, b)使用join省略了数组最后一行的换行符

请查看您的计划的替代方案,该方案适用上述建议。我已经排除了以点开头的所有目录条目,因为它成功删除了...以及以点开头的Linux“隐藏”条目。你可能需要不同的东西。

#!/usr/bin/perl
use strict;
use warnings;

opendir my $dh, $ARGV[0] or die $!;
my @dirs = grep { not /^\./ } readdir $dh;
print "$_\n" for @dirs;

答案 1 :(得分:5)

尝试转义.

@Dirs = grep { $_ !~ /^\.\.?$/ } @Dirs;

点是一个特殊的元字符,可以在未转义时匹配任何字符。

答案 2 :(得分:2)

正则表达式中的

.表示“任何字符”,请尝试将其转义为:\.