7 use Benchmark qw( timethese cmpthese ) ;
10 my @dims = @ARGV ? (shift, shift) : ( 3, 5 ) ;
12 my $data = generate_data( @dims ) ;
15 my $tmpl = Template::Simple->new() ;
16 my $comp = Template::Simple->new() ;
18 my $template = <<TMPL ;
25 Optional Level: [%level%]
31 $tmpl->add_templates( { bench => $template } ) ;
32 my $rendered = $tmpl->render( 'bench', $data ) ;
34 $comp->add_templates( { bench => $template } ) ;
35 $comp->compile( 'bench' ) ;
36 my $comp_rendered = $comp->render( 'bench', $data ) ;
37 #print $comp->get_source( 'bench' ) ;
39 my $ok = $$rendered eq $$comp_rendered ;
40 print "OK comp [$ok]\n" ;
42 my $appended = append( $data ) ;
43 $ok = $$rendered eq $$appended ;
44 print "OK append [$ok]\n" ;
47 #my $joined = joined( $data ) ;
51 # print $$comp_rendered ;
53 cmpthese( shift || -2,
55 render => sub { my $x = $tmpl->render( 'bench', $data ) },
56 # joined => sub { my $x = joined( $data ) },
57 # concat => sub { my $x = concat( $data ) },
58 append => sub { my $x = append( $data ) },
59 # compiler => sub { my $x = $comp->compile( 'bench' ) },
60 compiled => sub { my $x = $comp->render( 'bench', $data ) },
78 while( defined( my $data = shift @data ) ) {
80 if ( ref $data eq 'ARRAY' ) {
81 push @data, @{$data} ;
85 $out .= ref $data ne 'HASH' ? $data :
95 my $data = $data->{nest} ;
99 while( defined( my $data = shift @data ) ) {
101 if ( ref $data eq 'ARRAY' ) {
102 push @data, @{$data} ;
106 $out .= ref $data ne 'HASH' ? $data :
120 my $data = $data->{opt} ;
124 while( defined( my $data = shift @data ) ) {
126 if ( ref $data eq 'ARRAY' ) {
127 push @data, @{$data} ;
131 $out .= ref $data ne 'HASH' ? $data :
133 "\n\tOptional Level: "
165 while( defined( my $data = shift @data ) ) {
167 if ( ref $data eq 'ARRAY' ) {
168 push @data, @{$data} ;
172 $out .= ref $data ne 'HASH' ? $data :
180 my $data = $data->{nest} ;
184 while( defined( my $data = shift @data ) ) {
186 if ( ref $data eq 'ARRAY' ) {
187 push @data, @{$data} ;
191 $out .= ref $data ne 'HASH' ? $data :
204 my $data = $data->{opt} ;
208 while( defined( my $data = shift @data ) ) {
210 if ( ref $data eq 'ARRAY' ) {
211 push @data, @{$data} ;
215 $out .= ref $data ne 'HASH' ? $data :
216 "\n\tOptional Level: "
244 while( defined( my $data = shift @data ) ) {
246 if ( ref $data eq 'ARRAY' ) {
247 push @data, @{$data} ;
252 $out .= ref $data ne 'HASH' ? $data :
259 my @data = $data->{nest} ;
260 while( defined( my $data = shift @data ) ) {
262 if ( ref $data eq 'ARRAY' ) {
263 push @data, @{$data} ;
268 $out .= ref $data ne 'HASH' ? $data :
277 $out .= ref $data ne 'HASH' ? $data :
280 my @data = $data->{opt} ;
281 while( defined( my $data = shift @data ) ) {
283 if ( ref $data eq 'ARRAY' ) {
284 push @data, @{$data} ;
289 $out .= ref $data ne 'HASH' ? $data :
290 "\n\tOptional Level: "
298 $out .= ref $data ne 'HASH' ? $data :
312 my( $outer_size, $inner_size ) = @_ ;
316 for my $outer ( 1 .. $outer_size ) {
320 for my $inner ( 1 .. $inner_size ) {
324 val_1 => ($outer x 2),
325 val_2 => ($inner x 3),
327 level => "$outer-$inner",
332 level => "$outer-$inner",
338 push @outer_data, [@inner_data] ;
341 return \@outer_data ;