while(<FILE>){#逐行读取该文件然后凯桐猜显示出来
print "$_\n"
}
close(FILE) #关闭轮塌文件句柄
在WHILE循环中也可以加入一些正则匹配等代码盯型等等。
#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到,以该取出的值为名的数组的末尾。
}
}
不知道你这里读取具体指什么,我就把文件名打印出来,把文件内容打印出来吧。(程序指定两个参数,第一个参数是指定的文件夹名橘汪,每二慎指个参数是指定的扩展名。)#!/usr/bin/perl
use strict
use warnings
die "Usage: $0 <dir><extion>\n" unless @ARGV == 2
my $Dir = $ARGV[0]
my $Ext = $ARGV[1]
opendir(DH, "$Dir") or die "Can't open: $!\n"
#读取指定文件夹下面的指定扩展名的文件名,保存到数组圆孝仔里。
my @list = grep {/$Ext$/ &&-f "$Dir/$_" } readdir(DH)
closedir(DH)
chdir($Dir) or die "Can't cd dir: $!\n"
foreach my $file (@list){
open(FH, "$file") or die "Can't open: $!\n"
print "$file:\n"
while(<FH>){
}
print "\n"
close(FH)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)