7 use Benchmark qw( timethese ) ;
10 my @dims = @ARGV ? @ARGV : ( 3, 6 ) ;
12 my $data = generate_data( @dims ) ;
15 my $tmpl = Template::Simple->new() ;
17 my $template = <<TMPL ;
24 Optional Level: [%level%]
30 $tmpl->add_templates( { bench => $template } ) ;
35 my $rendered = $tmpl->render( 'bench', $data ) ;
37 #$tmpl->compile( 'bench', $data ) ;
38 #print $tmpl->get_source( 'bench' ) ;
39 #my $comp_rendered = $tmpl->render( 'bench', $data ) ;
40 #my $ok = $$rendered eq $$comp_rendered ;
42 my $joined = joined( $data ) ;
43 my $appended = joined( $data ) ;
45 my $ok = $$rendered eq $$appended ;
52 #print $$comp_rendered ;
54 timethese( shift || -2,
56 render => sub { my $x = $tmpl->render( 'bench', $data ) },
57 joined => sub { my $x = joined( $data ) },
58 concat => sub { my $x = concat( $data ) },
59 append => sub { my $x = append( $data ) },
82 while( defined( my $data = shift @data ) ) {
84 if ( ref $data eq 'ARRAY' ) {
85 push @data, @{$data} ;
89 $out .= ref $data ne 'HASH' ? $data :
99 my $data = $data->{nest} ;
103 while( defined( my $data = shift @data ) ) {
105 if ( ref $data eq 'ARRAY' ) {
106 push @data, @{$data} ;
110 $out .= ref $data ne 'HASH' ? $data :
124 my $data = $data->{opt} ;
128 while( defined( my $data = shift @data ) ) {
130 if ( ref $data eq 'ARRAY' ) {
131 push @data, @{$data} ;
135 $out .= ref $data ne 'HASH' ? $data :
137 "\n\tOptional Level: "
174 while( defined( my $data = shift @data ) ) {
176 if ( ref $data eq 'ARRAY' ) {
177 push @data, @{$data} ;
181 $out .= ref $data ne 'HASH' ? $data :
189 my $data = $data->{nest} ;
193 while( defined( my $data = shift @data ) ) {
195 if ( ref $data eq 'ARRAY' ) {
196 push @data, @{$data} ;
200 $out .= ref $data ne 'HASH' ? $data :
213 my $data = $data->{opt} ;
217 while( defined( my $data = shift @data ) ) {
219 if ( ref $data eq 'ARRAY' ) {
220 push @data, @{$data} ;
224 $out .= ref $data ne 'HASH' ? $data :
225 "\n\tOptional Level: "
255 while( defined( my $data = shift @data ) ) {
257 if ( ref $data eq 'ARRAY' ) {
258 push @data, @{$data} ;
262 $out .= ref $data ne 'HASH' ? $data :
269 my @data = $data->{nest} ;
270 while( defined( my $data = shift @data ) ) {
272 if ( ref $data eq 'ARRAY' ) {
273 push @data, @{$data} ;
277 $out .= ref $data ne 'HASH' ? $data :
288 my @data = $data->{opt} ;
289 while( defined( my $data = shift @data ) ) {
291 if ( ref $data eq 'ARRAY' ) {
292 push @data, @{$data} ;
296 $out .= ref $data ne 'HASH' ? $data :
297 "\n\tOptional Level: "
318 my( $outer_size, $inner_size ) = @_ ;
322 for my $outer ( 1 .. $outer_size ) {
326 for my $inner ( 1 .. $inner_size ) {
330 val_1 => ($outer x 2),
331 val_2 => ($inner x 3),
333 level => "$outer-$inner",
338 level => "$outer-$inner",
344 push @outer_data, [@inner_data] ;
347 return \@outer_data ;