NAME
Quote::Code - quoted strings with arbitrary code interpolation
SYNOPSIS
use Quote::Code;
print qc"2 + 2 = {2 + 2}"; # "2 + 2 is 4"
my $msg = qc{The {$obj->name()} is {$obj->state()}.};
my $heredoc = qc_to <<'EOT';
.trigger:hover .message:after {
content: "The #{get_adjective()} brown fox #{get_verb()} over the lazy dog.";
}
EOT
print $heredoc;
DESCRIPTION
This module provides the new keywords qc
and qc_to
.
qc
qc
is a quoting operator like q or qq. It works like q
in that it doesn't interpolate $foo
or @foo
, but like qq
in that it recognizes backslash escapes such as \n
, \xff
, \N{EURO SIGN}
, etc.
What it adds is the ability to embed arbitrary expressions in braces ({...}
). This is both more readable and more efficient than the old "foo @{[bar]}"
trick. All embedded code runs in scalar context.
If you need a literal {
in a qc
string, you can escape it with a backslash (\{
) or interpolate code that yields a left brace ({'{'}
).
qc_to
For longer strings you can use qc_to
, which provides a heredoc-like syntax. The main difference between qc
and qc_to
is that qc_to
uses the Ruby-like #{ ... }
to interpolate code (not { ... }
). This is because { }
are more common in longer texts and escaping them gets annoying.
qc_to
has two syntactic forms:
qc_to <<'FOO'
...
FOO
and
qc_to <<"FOO"
...
FOO
After qc_to
there must always be a <<
(this is to give syntax highlighters a chance to get things right). After that, there are two possibilities:
An identifier in single quotes. Backslash isn't treated specially in the string. To embed a literal
#{
, you need to write#{'#{'}
.An identifier in double quotes. Backslash escapes are recognized. You can escape
#{
by writing either\#{
or#\{
.
Variables aren't interpolated in either case.
AUTHOR
Lukas Mai, <l.mai at web.de>
COPYRIGHT & LICENSE
Copyright 2012-2013 Lukas Mai.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.