我在 Web 服務器后面有 Perl 代碼,我將 Perl 腳本與純 HTML 結合在一起。重要的部分如下所示:
#!/usr/local/bin/perl
use strict;
use warnings;
print "Content-type: text/html\n\n";
print <<ENDHTML;
<!DOCTYPE html>
<html lang="hu">
<head>
...
</head>
<body class="landing">
...
<section class="feature 6u$ 12u$(small)">
<h3 class="title">some title</h3>
<p>some text</p>
</section>
...
</body>
</html>
ENDHTML
當有人打開網頁時,此錯誤訊息將出現在日志中:
2022/06/27 13:28:44 [error] 7811#100158: *106 FastCGI sent in stderr: "Use of uninitialized value $12 in concatenation (.) or string at /path/to/file/index.pl line 78.
我知道這是因為use warnings;,如果我禁用它,那么日志中不會出現任何內容。但是,如果我可以忽略腳本的部分 from print <<ENDHTML;to那就太好了,ENDHTML因為它們是 HTML 代碼的一部分。有沒有辦法做到這一點,我也可以use warnings;?
uj5u.com熱心網友回復:
這是您的heredoc 字串中的美元符號。Perl 認為這些是變數。
<!-- XXXX -->
<section class="feature 6u$ 12u$(small)">
你需要逃避它們,像這樣:
<section class="feature 6u\$ 12u\$(small)">
雖然我想知道那是哪種 HTML。您不能將美元符號和括號作為類名的一部分。
更多詳情$12:
Perl 忽略 后的空格$,因為在 Perl 語法中美元符號不能獨立存在,并將12其后的數字視為變數名。$12將參考正則運算式匹配的第 12 個捕獲組。以數字開頭的變數名后面不能有字母,所以 it's$12和 not $12u。
uj5u.com熱心網友回復:
您的 here-doc 正在字串中插入變數,因為您使用了ENDHTML沒有顯式引號的裸字符。這與使用雙引號相同:".
如果您使用單引號,您將避免變數插值,這將消除警告訊息。改變:
print <<ENDHTML;
至:
print <<'ENDHTML';
你可以保留use warnings;. 請記住,如果您的 here-doc 確實有您未顯示的變數,它們也不會被插值。
請參閱類似引號的運算子(搜索EOF)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/495700.html
