Program: fixstyle
Imagine you have a table with both old and new strings, such as the following.
|
Old Words |
New Words |
|---|---|
|
bonnet |
hood |
|
rubber |
eraser |
|
lorry |
truck |
|
trousers |
pants |
The program in Example 1.4 is a filter that changes all occurrences of each element in the first set to the corresponding element in the second set.
When called without filename arguments, the program is a simple
filter. If filenames are supplied on the command line, an in-place
edit writes the changes to the files, with the original versions
safely saved in a file with a ".orig" extension.
See Section 7.9 for a description. A -v command-line option writes notification of
each change to standard error.
The table of original strings and their replacements is stored below
__END__ in the main program as described in
Section 7.6. Each pair of strings is converted into
carefully escaped substitutions and accumulated into the
$code variable like the
popgrep2 program in Section 6.10.
A -t check to test for an interactive run check
tells whether we’re expecting to read from the keyboard if no
arguments are supplied. That way if the user forgets to give an
argument, they aren’t wondering why the program appears to be
hung.
Example 1-4. fixstyle
#!/usr/bin/perl -w # fixstyle - switch first set of <DATA> strings to second set # usage: $0 [-v] [files ...] use strict; my $verbose = (@ARGV && $ARGV[0] eq '-v' && shift); if (@ARGV) { $^I = ".orig"; # preserve old files } else { warn "$0: Reading from stdin\n" if -t STDIN; ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access