可能重复:
Why does Perl's glob return undef for every other call?
这是我遇到的另一个问题的延续,我需要找到一个名字很长的文件,但我知道名字的哪一部分,这是我使用的代码:
my @RTlayerRabcd = ("WIRA_Rabcd_RT","WIRB_Rabcd_RT","WIRC_Rabcd_RT","WIRD_Rabcd_RT","WIRE_Rabcd_RT","BASE_Rabcd_RT");
#Rabcd calculations
for($i = 0; $i < 6; $i++)
{
print "@RTlayerRabcd[$i]\n";
#Searching for Rabcd Room Temperature readings
my $file = glob($dir . "*@RTlayerRabcd[$i]" . '.txt');
print "$file\n";
my $Rtot = 0;
#Open file, Read line
open (FILE, $file);
while (<FILE>)
{
#read line and and seperate at "tab" into $temp, $Res
chomp;
($Res, $temp) = split("\t");
$j++;
$Rtot=$Res+$Rtot;
}
close (FILE);
$Ravg = $Rtot/$j;
print FILE_OUT "$Ravg \t";
}
运行代码后,我得到以下打印件:
WIRA_Rabcd_RT
Vesuvious_C6R8_051211/vesu_R6C8_05112011_WIRA_Rabcd_Rt.txt
WIRB_Rabcd_RT
WIRC_Rabcd_RT
Vesuvious_C6R8_051211/vesu_R6C8_05112011_WIRC_Rabcd_Rt.txt
WIRD_Rabcd_RT
WIRE_Rabcd_RT
BASE_Rabcd_RT
Vesuvious_C6R8_051211/vesu_R6C8_05112011_BASE_Rabcd_Rt.txt
该程序似乎正在跳过文件,不知道为什么?
答案 0 :(得分:2)
在标量上下文中,glob遍历glob匹配的所有文件,在最后一个文件后返回undef
。它旨在用作while
循环中的条件,例如:
while (my $file = glob('*.c')) {
say $file;
}
迭代器与glob
的特定调用绑定。一旦迭代开始,就没有办法尽早重置迭代器。 glob
在返回undef
之后才会忽略其参数。
您可以在列表上下文中使用glob
来修复问题:
my ($file) = glob($dir . "*@RTlayerRabcd[$i]" . '.txt');
答案 1 :(得分:0)
我的猜测是目录Vesuvious_C6R8_051211不包含文件* WIRB_Rabcd_RT.txt,* WIRD_Rabcd_RT.txt和* WIRE_Rabcd_RT.txt。该目录的文件列表是什么?另外,我建议您检查open()的返回码,以确保它确实成功打开了文件。