- 论坛徽章:
- 0
|
在循环中如何来防止数组中的元素被修改
如id文件为:
3608,7754321
12345,343608
oldgrp文件为:
apache:12345
代码1 循环时,会发生
apache:343608
apache:347754321 (这一行是多出来的) 是由于循环数组的数据被修改了,又参与了循环
代码2 偶增加了临时变量,结果是正确的。
对于什么时候会修改循环原数据,我不是很明白。请高人指点下。
代码1:
#!/usr/bin/perl
use File::Basename;
open(SRCFILE,"<oldgrp");
open(IDFILE,"<id");
@idarr=<IDFILE>;
while( $grpline=<SRCFILE>){
foreach $each(@idarr)
{
chomp $each;
($sid,$nid)=split /,/,$each;
if($grpline =~ /$sid/)
{
$grpline=~ s/$sid/$nid/;
print "$grpline";
}
}
} |
代码2:
#!/usr/bin/perl
use File::Basename;
open(SRCFILE,"<oldgrp");
open(IDFILE,"<id");
@idarr=<IDFILE>;
while( $grpline=<SRCFILE>){
foreach $each(@idarr)
{
chomp $each;
($sid,$nid)=split /,/,$each;
my $gline=$grpline;
if($gline =~ /$sid/)
{
#print "$grpline\n";
$gline=~ s/$sid/$nid/;
print $gline;
}
}
} |
|
|