In Part 1 we had a quick look at what Perl and regular expressions
are, and introduced the idea of using them to process HTML files. In
Part 2 we developed a Perl script to process a single HTML file. In
part 3 we looked at one way of processing multiple files. In Part 4 we
looked at how to read in all the files in the current directory. In
this, the last part, we'll look at how to read in specific files in
specific directories.
In Part 4 we wrote a script that enabled us
to read in all the files in the current directory. Sometimes, however,
you might need to process files that are located in different
directories. script4.pl lists a script that will do this.
Note:
Due to display considerations, in the example code shown in this
article, square brackets '[..]' are used in HTML/script tags instead of
angle brackets '<..>'.
script4.pl
1 @allfiles=glob("file1.htm directory1/subdirectory1/*.shtm directory2/*.htm");
2 foreach $name (@allfiles) {
3 rename $file, "$file.bak";
4 open (IN, "<$file.bak");
5 open (OUT, ">$file");
6 while ($line = [IN]) {
7 $line =~ s/[h1]/[h1 class="big"]/;
8 (print OUT $line);
9 }
10 close IN;
11 close OUT;
12 }
The
only new line here is line 1, which uses the glob function to search
through specified directories and files. Firstly, it searches for
file1.htm in the current directory, and then it search for all files
ending in .shtm in directory1/subdirectory1, and then all files ending
in .htm in directory2. The asterisk (*) is a wildcard, which means any
filename.
Running the script
c:>perl script4.pl