Generating Other Languages in Perl
Perl is (among other things) a text-processing language, and most computer languages are textual. Beyond that, Perl’s lack of arbitrary limits, together with the various quoting and interpolation mechanisms, make it easy to visually isolate the code of the other language you’re spitting out. For example, here is a small chunk of s2p, the sed-to-perl translator:
print &q(<<"EOT");
: #!$bin/perl
: eval 'exec $bin/perl –S \$0 \${1+"\$@"}'
: if \$running_under_some_shell;
:
EOTHere the enclosed text happens to be legal in two languages, Perl
and sh. We’ve used an idiom right off
the bat that will preserve your sanity in the writing of a program
generator: the trick of putting a “noise” character and a tab on the
front of every quoted line, which visually isolates the enclosed code,
so you can tell at a glance that it’s not the code that is actually
being executed. One variable, $bin,
is interpolated in the multiline quote in two places, and then the
string is passed through a function to strip the colon and tab.
Of course, you aren’t required to use multiline quotes. One often
sees CGI scripts containing millions of print statements, one per line. It seems a bit
like driving to church in a Formula 1 car, but hey, if it gets you
there… (We will admit that a column of print statements has its own form of visual
distinctiveness.)
When you are embedding a large, multiline quote containing some other language (such as HTML), it’s often helpful to pretend you’re ...
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