glob没有选择匹配模式的所有文件,语法

时间:2016-09-15 11:40:40

标签: perl glob

我有一个目录,其中有超过10个以模式“my_Report”开头的文件。 虽然我尝试使用glod完成这项工作,但它只挑选了一个文件。下面的语法是否有任何问题

$g_map{"Rep"} = glob ("data_1/reports/my_Report*");

或者,我尝试使用grep查找所有文件并将其存储在哈希

$g_map{"Rep"} = [grep {!/\.xh$/} <data_1/reports/my_Report*>];

我的要求是从目录中找到具有特定模式的所有文件,并将其存储在带有“Rep”键的哈希中 我如何用glob实现同样的目标?

先谢谢

2 个答案:

答案 0 :(得分:3)

您的第一个电话是在标量上下文中。在标量上下文中,glob返回(最多)一个结果。

要检索所有匹配的文件,请使用列表上下文(就像在第二次调用中一样)

$g_map{"Rep"} = [ glob("data_1/reports/my_Report*") ]

或者如果您期望一个结果或只是想要第一个结果

($g_map{"Rep"}) = glob("data_1/reports/my_Report*");

答案 1 :(得分:2)

glob返回一个列表,但是你在标量上下文中调用它,这就是为什么你只得到一个结果。试试这个:

@{ $g_map{Rep} } = glob ("data_1/reports/my_Report*");

这会将$g_map{Rep}哈希键转换为数组引用,并且所有文件都将存储在其中。

你可以像这样访问它:

for (@{ $g_map{Rep} }){
    print "filename: $_\n";
}