如何用perl语言循环语句实现依次打开多个文件

2024-11-06 12:34:16
推荐回答(4个)
回答1:

#Perl程序变量用前不用声明,根据使用位置的上下文,Perl能自动分析变量类型

for ($inputFileListIndex=0;$inputFileListIndex<=$#inputFileArray;$inputFileListIndex++) {
#这就是一循环,当inputFileListIndex小于等于数组 inputFileArray的索引值时,执行循环。
#“$”这个符号引导的是变量,“@”这个符号引导的是数组,$#inputFileArray这个的意思是取inputFileArray这个数组的最后一个变量的索引值(就是这个数组元素个数-1)。

$tmp = $inputFileArray[$inputFileListIndex];
#建立一个临时变量tmp,然后把数组对应inputFileListIndex这个索引的值赋给tmp。

if ($tmp =~ /^(.*[\\\/])([^\\\/]+)$/){
#这块做了个正则表达式判断, =~是个表示用来做正则表达式匹配的符号,把后面的一串正则表达式与tmp中的字符串匹配,若果匹配成功,则为真。

#/^(.*[\\\/])([^\\\/]+)$/,这个两个“/” “/”符号限制出正则表达式的范围,里面的^(.*[\\\/])([^\\\/]+)$是正则表达式,^表示字符串的开头,$表示字符串的结尾,

#(.*[\\\/])这个括号框出了一个组,它是第一个组,组号是1,在后面有用。里面“.”表示 任何字符除了回车,“*"表示0到多个重复前面的那个字符,所以.*表示任意字符无限多次,就是什么都行的意思。之后的[]这个符号表示它里面指明的所有东西匹配上一个就行,它里面是\\\/,第一个\用来转义第二个\,第三个\用来转义第四个/,所以它实际上说的就是“\”和“/”匹配上一个就行。

#([^\\\/]+)接着又是一个组,组号2。[]这里面的^和外面不同,表示非的意思,所以就是说匹配任何字符, 只要不是“\”和“/”就行。接着一个“+”表示前面匹配到的字符至少有一个。

#所以总的来看,这段正则表达式的意思是,有一个字符串,从开始起在任意字符后,有一个“\”或“/”出现,之后有一个以上重复的非“\”和“/”的字符出现直到结尾。

push(@},$tmp);
#判断成功后,以匹配到的第一组“(.*[\\\/])”的内容为键,取出folderpath这个哈希里对应的值,并将tmp里的内容push到,以该取出的值为名的数组的末尾。

}
else{
push(@},$tmp);
#不然就把,取出folderpath这个哈希里对应“nofolder”这个键的值,并将tmp里的内容push到,以该取出的值为名的数组的末尾。
}
}

回答2:

while (my $file = glob "*.dat" )
{
open my $fh, '+>', "$file" or die $!;
while (<$fh>)
{

}
}

回答3:

### /path/to/many_file.dat

while (< "/path/to/*.dat" >) {
### This is called Directory glob
}

回答4:

学习了