Here document is a special syntax feature in scripting languages to tell the interpreter to treat a certain portion of the script text as a multi-line document or string literal. In essence, it is a fancy way of saying "multi-line string" (and by line we mean here lines of source code).

A here document is created by using the following syntax: start with the here document quote operator (In Unix shells and Perl, this is << ) followed by an end delimiter (this can be almost anything, so just pick anything that is unlikely to appear in the text). The interpreter will then treat the following lines as one string, up to (but not including) the first line containing ONLY your end delimiter (it shall not even contain a blank before it).

Examples

$a = <<END
Hello
world
END
print $a;

will result in exactly the same as had you written

$a = "Hello\nworld\n";
print $a;

That is, it will print this:

Hello
world

By default, Perl here documents are double-quote interpolated. You can explicitely set the quoting behaviour by putting the appropriate quote characters around the end delimiter (in the declaration):

print <<'END';
Use this for tabs: \t
Use this for newline: \n
END

will print:

Use this for tabs: \t
Use this for newline: \n
Or, you may even use this with backquote interpolation to create multi-line inline shell script in Perl:
print <<`END`;
ls spam/
ls eggs/
END

This string will contain the contents of the directories spam and eggs, provided that they exist, one after another.

Another popular use for here documents is to allow copy-pasteing static HTML code into your Perl scripts.

Obfuscation

To make things more complicated, you are allowed to define more than one here document on the same line. In this case, parsing the next here document will continue where the previous one left off, i.e.:

print <<END1, <<END2;
Hello
END1
world
END2

will print

Hello
world

just as if you would have written:

print "Hello\n", "world\n";