my $inputS = @ARGV[1]
my $output = @ARGV[2]
open INPUTF , $inputF or die "cannot open the file:$inputS$!\n"
open INPUTS, $inputS or die "cannot open the file:$inputS$!\n"
open OUTPUT, ">$output" or die "cannot open the file:$inputS$!\n"
our @listN=()
our %listL=()
my @line
while(<INPUTF>)
{
chomp
next unless $_
@listN = split //,$_ #将text1.txt 用“;”分割,放入数组@listN中
foreach my $n(@listN) #每行的内容都放入另一个数组@line里面保存
{ #(直至最后全部存在@line中)
push (@line, $n)
}
}
#print "@line\n" #调试
while(<INPUTS>)
{
chomp
next unless $_
my @map = split /\s+/,$_ #将text2.txt 用空格分割放入数组@map中
$listL{$map[0]}=$map[1] unless exists $listL{$map[0]}#并将$map[0]作为key值存在哈希
}
foreach my $list(@line)#把text1.txt中的全部拿出来找相关的mapping对象
{
if (exists $listL{$list})#如果找到了 证明有mapping object
{
print OUTPUT "number: $list, mapping: $listL{$list}\n" #输出到text3.txt中(自命名)
}
}
#perl F:\perltest\mapping.pl F:\perltest\text1.txt F:\perltest\text2.txt F:\perltest\text3.txt
$values= <OUTFILE>这样这个变量只读取了一行啊,$/ 中保存这输入行记录分隔符(它的默认分隔符是\n)。因此,每当菱形运算符用于读取数据时,它将一直读取数据,直到它发现与$/一致的字符。所以,如果我们将$/设为 undef ,菱形运算符将读取整个文件并将它们存储在标量中。
要想让perl“吞吃文件”,可以改成这样:
use strict
my $values
open(OUTFILE,"file.txt") or die("Can't find file.txt:$!")
$/ = undef# 此行注掉后,$values 仅读入Logon Failure:
while(defined($values= <OUTFILE>)){
# print $values
if($values =~ /.*User Name:(.*)(.*)/ms){
print $1
print $2
}}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)