zjzc01:/root/dbi# cat a1.pl 
my $a = $ARGV[0];

my $b = $ARGV[1];

my $c = $ARGV[2];

my $d = $ARGV[3];

my $f = $ARGV[4];

my $g = $ARGV[5];

open MEGADATA , ">>a.txt" or dir $!;

my $record = join (":",$a,$b,$c,$d,$e,$f,$g);
print MEGADATA "$record\n";

zjzc01:/root/dbi# cat a.txt
::::::
a:b:c:d::e:

##########下面脚本不匹配直接跳过,continue写入,匹配进行修改,在continue里写入:



用术语来解释的话,就是说,\Q 取消所有元字符的含义直到遇见 \E 为止。

zjzc01:/root/dbi# cat a.txt
a:b:c:d:e
1:2:3:4:5


zjzc01:/root/dbi# cat a2.pl
my $megalithFile = $ARGV[0];

my $siteName = $ARGV[1];

my $siteMapRef = $ARGV[2];

my $tempFile = "tmp.$$";

open MEGADATA ,"<$megalithFile" or die $!;

open TMPEGADATA ,">>$tempFile" or die $!;

while (<MEGADATA>){

##不匹配跳过,不修改,下面continue写入
print "\$_ is $_\n";
next unless m/^\Q$siteName:/;

my($name,$location,$mapref,$type,$description) = split(/:/,$_);

##跳过如果 $siteName 不等于$name
next unless $siteName eq $name;

$mapref=$siteMapRef;

$_=join(":",$name,$location,$mapref,$type,$description);
print "\$_ is $_\n";
}
continue { print TMPEGADATA $_."\n"
};

修改后为:
zjzc01:/root/dbi# cat tmp.22884
a:b:x:d:e

1:2:3:4:5