我有一个目录,其中有超过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实现同样的目标?
先谢谢
答案 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";
}