in reply to searching a particular file from a directory that is passed on command prompt
Hi hector89,
The problem is that readdir returns the names of files (or directories) in the specified directory, but not their paths. So you need to either:
chdir $dirName;
before entering the foreach loop, or else add:
$txtfile = $dirName . '\\' . $txtfile;
at the start of the code within the loop to prepend the directory path to each filename.
You probably would have seen this yourself if you had included:
use warnings;
at the start of your script.
Here is a working version with a little sanity checking added:
#!/usr/bin/perl use strict; use warnings; (my $prog_name = $0) =~ s| ^ (?: .* [\\/])? (.*) \.pl $ |$1|x; (my $dirName = $ARGV[0]) or die "Usage: $prog_name <directory>"; opendir(DIR, $dirName) or die "Unable to open directory '$dirName': $!"; my @files = grep(/ \.txt $ /x, readdir(DIR)); closedir(DIR); chdir $dirName; # <-- EITHER add this foreach my $txtfile (@files) { # $txtfile = $dirName . '\\' . $txtfile; # <-- OR add this print "$txtfile\n"; open(my $input_fh, '<', $txtfile) or die "Unable to open file '$txtfile' for reading: $!"; undef($/); my $file = <$input_fh>; close $input_fh; $file =~ s/(<%--)?\s*<script(.*?)>/($1 ? '' : "\n<%-- ") . "<scrip +t$2>"/ige; $file =~ s=</script>\s*(-->)?='</script>' . ($1 ? '' : " -->\n")=i +ge; print $file; open(my $output_fh, '>', $txtfile) or die "Unable to open file '$txtfile' for writing: $!"; print $output_fh $file; close $output_fh; }
HTH,
Athanasius <°(((>< contra mundum
|
|---|