我尝试使用q {}创建一个Javascript字符串:
my $javascript = q{
$(function () {
var chart;
$(document).ready(function () {
// Build the chart
$(\'#container\').highcharts({
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false
},
title: {
text: \'title\'
},
};
它需要像这样的段,而不是完整的Javascript块。我的问题是,由于该块未完成,因此它包含开括号' {'没有关闭括号和perl将q {}的右括号解释为其中一个javascript块的结束括号。我尝试使用q()代替,但同样的问题发生。我可以使用另一个字符作为分隔符而不是(或{?我也尝试过使用qq但是这导致了相同的问题,并且它涉及更多的转义。我知道我可以在没有q或qq的情况下完成它而只是写单行,但是这看起来更干净,所以我想让这个工作,我相信一定有办法。 谢谢!
答案 0 :(得分:4)
在单引号文字中,您必须转义\
和分隔符(在这种情况下为{
和}
)。
q{abc\{def\\ghi'jkl} # Produces: abc{def\ghi'jkl
例外:如果明确无误,则无需转义\
。
q{abc\\def} # Produces: abc\def
q{abc\def} # Produces: abc\def, just like previous
q{abc\\\\def} # Produces: abc\\def
q{abc\\\def} # Produces: abc\\def, just like previous
例外:如果您使用的是{}
,[]
或()
,则不需要分隔符。\ n \ n分隔符在文字中是平衡的。
q{ foo \{ bar \{ baz \} qux \} moo } # Produces: foo { bar { baz } qux } moo
q{ foo \{ bar { baz } qux \} moo } # Same as above
q{ foo { bar { baz } qux } moo } # Same as above
问题在于你没有正确地逃脱分隔符。您还希望\'
在'
结果\'
时生成my $javascript = q{
$(function () \{ <---- Escape
var chart;
$(document).ready(function () \{ <---- Escape
// Build the chart
$('#container').highcharts({ <---- No slash for ', and
chart: { optional for balanced { }
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false
},
title: {
text: 'title'
},
};
。
\\
更好的是,使用未出现在文本中的分隔符。 (你只需要逃离my $javascript = q~
$(function () {
var chart;
$(document).ready(function () {
// Build the chart
$('#container').highcharts({
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false
},
title: {
text: 'title'
},
~;
。)
my $javascript = <<'__EOJS__';
$(function () {
var chart;
$(document).ready(function () {
// Build the chart
$('#container').highcharts({
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false
},
title: {
text: 'title'
},
__EOJS__
另一种选择是使用单引号的heredoc。你不需要 - 实际上你不能 - 逃避任何事情。
{{1}}
答案 1 :(得分:3)
使用其他分隔符,例如q~ ~
my $javascript = q~
$(function () {
var chart;
$(document).ready(function () {
// Build the chart
$('#container').highcharts({
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false
},
title: {
text: 'title'
},
~;
或使用heredoc:
my $javascript = <<'END_JS';
$(function () {
var chart;
$(document).ready(function () {
// Build the chart
$('#container').highcharts({
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false
},
title: {
text: 'title'
},
END_JS
注意:我在上面的文字中将所有\'
翻译为'
,因为它们可能是最初使用单引号作为分隔符的工件。