在單引號文字中,您必須轉義\
和分隔符(本例中爲{
和}
)。
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
例外:如果你使用{}
,[]
或()
分隔符是字面平衡你不必分隔符。
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很好。我嘗試了多個其他分隔符,他們沒有工作......我試過〜,*,%,\等。他們不工作的任何理由? –
如果像上面'q〜〜'演示的那樣使用它們,並且您的實際文本與您的示例相匹配,那麼爲什麼替代分隔符不起作用是沒有道理的。你會希望選擇一個理想情況下未包含在文本中的分隔符。 '〜'可能是最常見的選擇。但是,如果你擁有的只是文本文本,在我看來,heredoc是你的最佳選擇。 – Miller
看起來像是在工作,我使用VIM,並且顏色爲字符串等而改變,當我使用像〜這樣的分隔符時,就像字符串和變量一樣改變顏色。但是,當我編譯時,它運行正常。只是不愉快的看看。我想我會堅持heredoc。謝謝! –