與this question相關,我想知道在Perl中僅使用核心模塊填充簡單XML模板的最佳方式是什麼 - 我無法在我的情況下使用額外的模塊。有任何想法嗎?來自核心模塊的Perl簡單XML模板?
0
A
回答
1
您可以使用替代s///
運算符和eval評估/ee
修飾符來創建一些非常簡單的操作。
像這樣的事情
use strict;
use warnings;
my $template = <<'END';
<file>
<state>$state</state>
<timestamp>$time</timestamp>
<location>$location</location>
</file>
END
my $state = 'Oregon';
my $time = '10:04';
my $location = 'Salem';
(my $output = $template) =~ s{(\$\w+)}{ $1 }eeg;
print $output;
輸出
<file>
<state>Oregon</state>
<timestamp>10:04</timestamp>
<location>Salem</location>
</file>
1
明顯的推論鮑羅廷的建議解決方法就是使用哈希來初始化數據。鑑於他通過將正則表達式的LHS限制爲單詞字符來保護您,這在功能上是相同的。但使用散列可能是更好的做法,因爲只有那些你想要導入模板的變量。
此外,您會使用這種方法得到稍微好一點的錯誤信息:
use strict;
use warnings;
my $template = <<'END';
<file>
<state>$state</state>
<timestamp>$time</timestamp>
<location>$location</location>
</file>
END
my %data = (
state => 'Oregon',
time => '10:04',
location => 'Salem',
);
(my $output = $template) =~ s{\$(\w+)}{
$data{$1} // die "Variable '$1' from template not initialized"
}eg;
print $output;
相關問題
- 1. Perl:JavaScript :: V8模板 - 來自perl
- 2. 如何覆蓋Magento核心塊模板?
- 3. 如何確定所需的模塊是來自寶石還是核心模塊?
- 4. 啓動Tomcat時,Web模塊找不到來自核心模塊的類
- 5. 創建簡單的內核模塊
- 6. 在簡單的Perl模板系統中編譯模板
- 7. 覆蓋模塊中的核心模板文件
- 8. 使用來自核心模塊的組件
- 9. 引用來自NativeScript UI插件的核心模塊
- 10. Magento覆蓋來自模塊的核心文件
- 11. 在ASP.Net核心模板
- 12. 角模板NOT核心
- 13. Drupal - 核心用戶模塊
- 14. Node.js - 核心羣集模塊
- 15. Magento核心模塊事件
- 16. Perl的便攜式序列僅與核心模塊
- 17. 使用優化來修補核心模塊,如內核
- 18. 來自XML的MessageHandlerChain作爲模板
- 19. 包含來自Jinja模板的塊
- 20. 模塊自定義模板
- 21. Perl時區轉換 - 但只能使用核心模塊
- 22. 如何在Perl中重新分配非核心模塊?
- 23. 是否可以象徵性地引用Perl核心模塊?
- 24. 我們如何知道Perl核心模塊何時被棄用?
- 25. iOS的11核心NFC - 沒有這樣的模塊「核心NFC」
- 26. React-Native - 使用依賴於node.js核心模塊的Javascript模塊
- 27. 從libgdx的核心模塊類訪問Android模塊類
- 28. Mozilla核心Javascript模塊的位置
- 29. 核心模塊對業務的使用
- 30. 模板模板參數簡單示例
哇!那簡單而美麗。現在我會看到更多關於'/ ee'的信息,看看它有多強大。 – 719016
@ 200508519211022689616937:這是你*必須非常小心的事情,因爲在字符串上調用'eval'可能會造成嚴重的損害。在這種情況下是安全的,因爲被評估的字符串始終是標量變量的名稱,所有'eval'都可以返回該變量的內容。但是沒有什麼能夠阻止一個字符串包含一個完整的Perl程序來刪除文件,並且通常會對系統造成嚴重破壞。如果您的字符串來自程序之外,並且可能由惡意用戶提供,請加倍小心。 – Borodin