Subject: | [PATCH] BROKEN returns undef not handled correctly |
I believe I've found a discrepancy between the documentation for
Text::Template and its implementation. Specifically:
"BROKEN"
...
If the "BROKEN" function returns "undef", "Text::Template" will
immediately abort processing the template and return the text that
it has accumulated so far.
...
However, the code always returns undef:
if ($fi_eval_err) {
$fi_res = $fi_broken->(...);
if (defined $fi_res) {
## kb: removed
} else {
## kb: this always returns undef!
return $fi_res; # Undefined means abort processing
}
I believe you meant to use this, which will contain the "text that it has
accumulated so far" as per the perldoc:
} else {
return $fi_r;
}
Since the current behavior for undef can be had equally well by returning
an empty string, I think this is a case where the module should be
adjusted to have the documented behavior for undef.
Subject: | text-template.patch |
Index: t/14-broken.t
===================================================================
--- t/14-broken.t (.../vendor/1.44) (revision 7)
+++ t/14-broken.t (.../branches/undef-fix) (revision 7)
@@ -3,7 +3,7 @@
use Text::Template;
-print "1..5\n";
+print "1..6\n";
$n=1;
@@ -80,3 +80,16 @@
$n++;
}
+# (6) BROKEN sub handles undef
+
+{ my $r = Text::Template->new(TYPE => 'string',
+ SOURCE => 'abc{1/0}defg',
+ )->fill_in(BROKEN => sub { undef });
+ if ($r eq qq{abc})
+ {
+ print "ok $n\n";
+ } else {
+ print "not ok $n\n# $r ne 'abc'\n";
+ }
+ $n++;
+}
Index: lib/Text/Template.pm
===================================================================
--- lib/Text/Template.pm (.../vendor/1.44) (revision 7)
+++ lib/Text/Template.pm (.../branches/undef-fix) (revision 7)
@@ -339,7 +339,7 @@
$fi_r .= $fi_res;
}
} else {
- return $fi_res; # Undefined means abort processing
+ return $fi_r; # Undefined means abort processing
}
} else {
if (defined $fi_ofh) {