Bạn đang tìm kiếm:
DEBUG_UNDEF
Tùy chọn này khiến Toolkit Mẫu để ném ra một lỗi 'undef' bất cứ khi nào nó gặp một giá trị biến không xác định.
use Template::Constants qw(:debug);
my $template = Template->new({
DEBUG => DEBUG_UNDEF,
});
(Từ http://search.cpan.org/dist/Template-Toolkit/lib/Template/Manual/Config.pod.)
Nếu bạn muốn làm một số xử lý đặc biệt của ngoại lệ, bạn sẽ cần to catch it or replace the __DIE__
signal handler.
Hãy đặt nó với nhau:
#!/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);
Đầu ra là:
undef error - nothing is undefined
First something undefined: .
And now something defined: 42.
Biện pháp của tôi là sử dụng hai trường hợp khác nhau của lớp mẫu:
$debug_tt
trong đó có cờ DEBUG_UNDEF
được bật và ẩn đầu ra của nó trong biến số $output
.
$tt
là ví dụ vani và in đầu ra thành STDOUT
làm mặc định.
Cả hai trường hợp sử dụng cùng một mẫu lưu trữ trong $template
và băm cùng một biến lưu trữ trong $vars
. $debug_tt
được gói trong một eval
để tránh thoát sớm và cảnh báo được phát ra nếu $debug_tt->error()
là đúng. $tt
được thực hiện bình thường. Tôi nghĩ rằng điều này đáp ứng yêu cầu chính của bạn mặc dù nó có thể không hiệu quả. Chúng ta cần phân tích cú pháp $template
hai lần bằng phương pháp này.
Vài suy nghĩ tôi đã làm việc về vấn đề này:
Nó sẽ được tốt đẹp nếu Template::Toolkit
đã sử dụng Carp
để chúng tôi có thể nhận được bối cảnh nhiều hơn một chút trên cảnh báo.
Có thể có thể lấy được một lớp từ Mẫu sẽ warn
thay vì die
do lỗi. Tôi không muốn làm điều đó.
Tùy thuộc vào cách các mẫu của bạn được thiết lập, bạn có thể tạo mẫu theo từng dòng để bạn có thể phát ra số dòng khi tìm thấy giá trị không xác định.
Có thể thay đổi các mẫu để kiểm tra lỗi của chính chúng và phát ra văn bản hợp lý hơn khi đối mặt với các giá trị không xác định.
Nguồn
2009-02-25 21:25:47
Thấy điều đó, nhưng không chắc liệu nó có thể phun ra nhiều thứ khác nữa không. – cdleary
Ngoài ra, có cách nào để làm cho nó đi đến một xử lý tập tin cụ thể? – cdleary
Dunno, xin lỗi :) Tôi sử dụng Mẫu :: Tinh chỉnh. – jrockway