I piping the output of several scripts. One of these scripts outputs an entire HTML page that gets processed by my perl script. I want to be able to pull the whole 58K of text
tl;dr: see at the bottom of the post. Explanation first.
I’ve just wondered about the same, but I wanted something suitable for a shell one-liner. Turns out this is (Korn shell, whole example, dissected below):
print -nr -- "$x" | perl -C7 -0777 -Mutf8 -MEncode -e "print encode('MIME-Q', 'Subject: ' . <>);"; print
Dissecting:
print -nr -- "$x"
echos the whole of $x
without any trailing newline (-n
) or backslash escape (-r
), POSIX equivalent: printf '%s' "$x"
-C7
sets stdin, stdout, and stderr into UTF-8 mode (you may or may not need it)-0777
sets $/
so that Perl will slurp the entire file; reference: man perlrun(1)-Mutf8 -MEncode
loads two modulesprint encode('MIME-Q', 'Subject: ' . <>);
, let’s look at it from inner to outer, right to left:
<>
takes the entire stdin content"Subject: "
Encode::encode
asking it to convert that to MIME Quoted-Printable; print
, again in Korn shell, which is the same as ; echo
in POSIX shell – just echoïng a newline.Call perl
with the -0777
option. Then, inside the script, <>
will contain the entire stdin.
#!/usr/bin/perl -0777
my $x = <>;
print "Look ma, I got this: '$x'\n";