这两个命令处理数据的方式有何不同。
这些命令用于创建示例数据
mkdir 1234
touch 1234/123
use strict;
use warnings;
use File::Path;
opendir my($dh),".";
for my $i (grep{ -d && /^(\d*)_\1/} readdir $dh){
rmtree $i
}
这将删除目录和所有内容。
use strict;
use warnings;
use File::Path;
opendir my($dh),".";
rmtree for grep{ -d && /^1234$/} readdir $dh
这不会删除目录也不会出错
将删除两者的目录。
perl, v5.10.0
GNU bash, version 3.2.51
如果我用rmtree
替换print
命令,则会正确打印所有文件夹。所以这可能与某些命令处理参数的方式有关,以及这些args是如何由不同的类型提供的。
只需要询问任何进一步的信息。
答案 0 :(得分:3)
rmtree
不是内置函数,因此如果没有给出参数,它不会使用$_
作为默认参数。您需要在第二个示例中明确传递它。
rmtree $_ for grep{ -d && /^1234$/} readdir $dh;
如果CPAN模块提供适用于$_
的功能,它将始终在文档中说明。这不是这里的情况。并非所有Perl的内置插件都能做到这一点。 perlfunc中的文档也会为每个文档明确说明这一点。