आप के लिए देख रहे हैं:
DEBUG_UNDEF
यह विकल्प खाका टूलकिट जब भी यह एक अपरिभाषित चर मूल्य का सामना करना पड़ता है एक 'undef' त्रुटि फेंक करने का कारण बनता
डॉक्स यहाँ देखें।
use Template::Constants qw(:debug);
my $template = Template->new({
DEBUG => DEBUG_UNDEF,
});
(http://search.cpan.org/dist/Template-Toolkit/lib/Template/Manual/Config.pod से।)
आप अपवाद के कुछ विशेष हैंडलिंग क्या करना चाहते हैं, तो आप to catch it or replace the __DIE__
signal handler की आवश्यकता होगी।
की यह एक साथ रखा है:
#!/usr/bin/perl
use strict;
use warnings;
use Template;
use Template::Constants qw(:debug);
my $debug_tt = Template->new({
DEBUG => DEBUG_UNDEF,
});
my $tt = Template->new();
my $vars = {
something => "42",
};
my $template = <<EOF;
First something undefined: [% nothing %].
And now something defined: [% something %].
EOF
my $output = '';
eval {$debug_tt->process(\$template, $vars, \$output)};
warn $debug_tt->error() if $debug_tt->error();
$tt->process(\$template, $vars);
उत्पादन होता है:
:
undef error - nothing is undefined
First something undefined: .
And now something defined: 42.
मेरे दृष्टिकोण टेम्पलेट वर्ग के दो अलग-अलग विविधताएं का उपयोग किया गया $debug_tt
जो है DEBUG_UNDEF
ध्वज चालू हो गया और $output
चर में इसके आउटपुट को छुपाता है।
$tt
जो एक वेनिला उदाहरण है और इसके आउटपुट को STDOUT
पर डिफ़ॉल्ट रूप से प्रिंट करता है।
दोनों उदाहरणों में एक ही और एक ही चर हैश $vars
में संग्रहीत $template
में संग्रहित टेम्पलेट का उपयोग करें। eval
में समय से बाहर निकलने से बचने के लिए लपेटा गया है और $debug_tt->error()
सत्य होने पर चेतावनी उत्सर्जित की जाती है। $tt
सामान्य रूप से निष्पादित किया जाता है। मुझे लगता है कि यह आपकी मुख्य आवश्यकताओं को पूरा करता है हालांकि यह संभवतः कुशल नहीं है। हमें इस विधि का उपयोग करके दो बार $template
पार्स करने की आवश्यकता है।
कुछ विचार है कि मैं इस पर काम कर रहा था:
यह अच्छा हो गया होता यदि Template::Toolkit
Carp
का इस्तेमाल किया था तो हम चेतावनी पर थोड़ा अधिक संदर्भ पाने सकता है।
कोई शायद टेम्पलेट से एक वर्ग प्राप्त कर सकता है जो की बजाय त्रुटि पर warn
होगा। मुझे ऐसा करने की तरह महसूस नहीं हुआ।
आपके टेम्पलेट्स कैसे सेट अप किए जाते हैं, इस पर निर्भर करते हुए, एक समय में इसे एक पंक्ति में खिलाने का अर्थ हो सकता है ताकि जब आप एक अपरिभाषित मान पाएंगे तो आप पंक्ति संख्याओं को उत्सर्जित कर सकते हैं।
टेम्पलेट्स को अपनी त्रुटियों के परीक्षण के लिए बदलने और अपरिभाषित मूल्यों के चेहरे में अधिक समझदार पाठ को उत्सर्जित करना संभव होना चाहिए।
स्रोत
2009-02-25 21:25:47
देखा कि, लेकिन यह सुनिश्चित नहीं था कि यह अन्य सामानों का एक गुच्छा भी होगा। – cdleary
इसके अलावा, क्या यह किसी विशेष फ़ाइल हैंडल पर जाने का कोई तरीका है? – cdleary
डुनो, क्षमा करें :) मैं टेम्पलेट :: परिष्कृत का उपयोग करता हूं। – jrockway