| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | #!perl## test apparatus for Text::Template moduleuse strict;use warnings;use Test::More;unless (eval { require Safe; 1 }) {    plan skip_all => 'Safe.pm is required for this test';}else {    plan tests => 4;}use_ok 'Text::Template' or exit 1;# Test the OUT feature with safe compartmentsmy $template = q{This line should have a 3: {1+2}This line should have several numbers:{ $t = ''; foreach $n (1 .. 20) { $t .= $n . ' ' } $t }};my $templateOUT = q{This line should have a 3: { $OUT = 1+2 }This line should have several numbers:{ foreach $n (1 .. 20) { $OUT .= $n . ' ' } }};my $c = Safe->new;# Build templates from string$template = Text::Template->new(    type   => 'STRING',    source => $template,    SAFE   => $c) or die;$templateOUT = Text::Template->new(    type   => 'STRING',    source => $templateOUT,    SAFE    => $c) or die;# Fill in templatesmy $text = $template->fill_in()    or die;my $textOUT = $templateOUT->fill_in()    or die;# (1) They should be the sameis $text, $textOUT;# (2-3)  "Joel Appelbaum" <[email protected]> <000701c0ac2c$aed1d6e0$0201a8c0@prime># "Contrary to the documentation the $OUT variable is not always# undefined at the start of each program fragment.  The $OUT variable# is never undefined after it is used once if you are using the SAFE# option.  The result is that every fragment after the fragment that# $OUT was used in is replaced by the old $OUT value instead of the# result of the fragment.  This holds true even after the# Text::Template object goes out of scope and a new one is created!"## Also reported by Daini Xie.{    my $template = q{{$OUT = 'x'}y{$OUT .= 'z'}};    my $expected = "xyz";    my $s        = Safe->new;    my $o        = Text::Template->new(        type   => 'string',        source => $template);    for (1 .. 2) {        my $r = $o->fill_in(SAFE => $s);        is $r, $expected;    }}
 |