我使用readdir来获取目录的文件,但我想删除.和..使用grep.输出显示它仍然包含.和..,但我无法弄清楚它有什么问题?
这是我的代码
#!/usr/bin/perl
opendir(Dir,$ARGV[0]);
@Dirs = readdir(Dir);
@Dirs = grep { $_ != /./ } @Dirs;
# @Dirs = grep { $_ =~ /^./ } @Dirs;
print join("\n",@Dirs);
Run Code Online (Sandbox Code Playgroud)
谢谢
我强烈建议你注意以下几点
始终 use strict和use warnings,甚至对代码的哪怕一丁点.他们会多次给你额外的打字时间
始终使用词法目录句柄和文件句柄.像这样的全球手柄已经有超过12年的错误选择了
务必检查的文件和目录的成功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;
Run Code Online (Sandbox Code Playgroud)
尝试逃避.:
@Dirs = grep { $_ !~ /^\.\.?$/ } @Dirs;
Run Code Online (Sandbox Code Playgroud)
点是一个特殊的元字符,可以在未转义时匹配任何字符.
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |