G
Guest
The sub below uses the Tie::File module to perform a string
substitution using strings in the hash %strings. The hash
would contain IP addresses, an old and new address,
corresponding to the key/value pairs. The idea is
to replace IP addresses. Anyway, it worked well when
there were about 10 elements in the array, but when
there are ~ 100, the code runs unacceptably slow.
I've tried deferring writing, but that didn't help much.
Anything else I can do to speed up this code, and still
continue using Tie::File?
-Thanks
sub DoReplace {
$matchflag = 0;
#Skip things that we don't want to process, namely binaries and dirs.
#Do a "perldoc -f -f" to view test switches.
return unless -T;
my $obj = tie(@array, 'Tie::File', $_) || die "$!\n";
(tied @array)->defer;
for (@array) {
while ((my $key, my $value) = each %strings) {
if (s/$key/$value/){
print "Processing==> $File::Find::name\n" unless $matchflag == 1;
$matchflag = 1;
}
(tied @array)->flush;
}
}
untie @array;
}
substitution using strings in the hash %strings. The hash
would contain IP addresses, an old and new address,
corresponding to the key/value pairs. The idea is
to replace IP addresses. Anyway, it worked well when
there were about 10 elements in the array, but when
there are ~ 100, the code runs unacceptably slow.
I've tried deferring writing, but that didn't help much.
Anything else I can do to speed up this code, and still
continue using Tie::File?
-Thanks
sub DoReplace {
$matchflag = 0;
#Skip things that we don't want to process, namely binaries and dirs.
#Do a "perldoc -f -f" to view test switches.
return unless -T;
my $obj = tie(@array, 'Tie::File', $_) || die "$!\n";
(tied @array)->defer;
for (@array) {
while ((my $key, my $value) = each %strings) {
if (s/$key/$value/){
print "Processing==> $File::Find::name\n" unless $matchflag == 1;
$matchflag = 1;
}
(tied @array)->flush;
}
}
untie @array;
}