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";