Hi rjsaulakh,
As ysth pointed out, my code was not doing the in-place editing part, nor the multi-line edit. But those are quite easy to do.
Here's a modified example that should work for you.
Notice that the datafile can contain blank lines or commented-out lines, which are skipped (eg. # testfile).
Notice, too, that the input file, once it's read and processed, is being written to, so it's REALLY an in-place edit.
Warning: Since it's doing in-place edits, be careful to have a backup copy of any files that you need to keep the original of!
Here's the code:
#!/usr/bin/perl
+
# Always use these
use strict;
use warnings;
+
# Edit contains the complete path of the files to be edited
my $path = "/home/rjs/heena/edit" ;
+
# Getting a file handler (and test for success/failure!)
open(FL, "<", $path) or die "unable to open data file '$path' ($!)\n";
+
# Getting all the file names in the @array so that i can process the
# file one by one
chomp(my @array = <FL>);
+
# Close the data file
close(FL);
+
# Process each file
+
foreach my $file (@array) {
next if ($file =~ /^\s*(#|$)/); # Skip blank/commented lines
process_file($file); # Process file
}
+
+
# Subroutines
sub process_file {
my ($file) = @_;
+
$/ = ""; # Read entire file as a single line
my $fh; # Declare file handle (better than using globals)
+
# Read the file
open($fh, "<", $file) or die "unable to read file '$file' ($!)\n";
$_ = <$fh>;
close($fh);
+
# Apply the change
s/CONFIDENTIAL(.*?)own\s+risk/ /sm;
+
# Write the file back TO THE SAME FILENAME
open($fh, ">", $file) or die "unable to write file '$file' ($!)\n"
+;
print $fh $_;
close $fh;
}
I made the file-processing into a subroutine for clarity, but you could do it within the loop if you wanted to, naturally.
s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/
|