Hey, can anyone repeat this or explain what obvious mistake I made?

Thanks,

On Tue, Jun 26, 2007 at 11:51:07AM -0700, Bill Moseley wrote:
> I've got a plugin that returns an array ref.  Not sure what was in my
> coffee this morning, but when I then try to unshift another element
> onto that array ref nothing happens.
> 
> But if I copy the value return from the plugin and then unshift than
> then that works fine.
> 
> 
> 
> $ cat arrayref.pl
> 
>     use strict;
>     use warnings;
>     use Template;
> 
> 
>     Template->new->process( \*DATA ) or die;
> 
>     __END__
> 
>     In template
>     [%
>         USE Dumper;
>         USE first = Arrayref;
> 
>         Dumper.dump( first );
> 
>         first.unshift( [ { foo => 'bar' } ] );
> 
>         "note no change\n";
>         Dumper.dump( first );
> 
>         "no copy and change\n";
> 
>         x = first;
> 
>         x.unshift( [ { foo => 'bar' } ] );
> 
>         first = x;
> 
>         Dumper.dump( first );
>     %]
> 
> 
> $ perl arrayref.pl
> 
> In template
> $VAR1 = [                       <<<< array ref returned from plugin
>           [
>             {
>               'one' => 1,
>               'two' => 2
>             },
>             {
>               'three' => 2,
>               'four' => 4
>             }
>           ],
>           [
>             {
>               'xone' => 1,
>               'xtwo' => 2
>             },
>             {
>               'xthree' => 2,
>               'xfour' => 4
>             }
>           ]
>         ];
> 
> 
> note no change
> $VAR1 = [                       <<<< first.unshift
>           [
>             {
>               'one' => 1,
>               'two' => 2
>             },
>             {
>               'three' => 2,
>               'four' => 4
>             }
>           ],
>           [
>             {
>               'xone' => 1,
>               'xtwo' => 2
>             },
>             {
>               'xthree' => 2,
>               'xfour' => 4
>             }
>           ]
>         ];
> 
> no copy and change              <<<< copy and push
> $VAR1 = [
>           [
>             {
>               'foo' => 'bar'    <<< works!
>             }
>           ],
>           [
>             {
>               'one' => 1,
>               'two' => 2
>             },
>             {
>               'three' => 2,
>               'four' => 4
>             }
>           ],
>           [
>             {
>               'xone' => 1,
>               'xtwo' => 2
>             },
>             {
>               'xthree' => 2,
>               'xfour' => 4
>             }
>           ]
>         ];
> 
> 
> 
> 
> $ cat Template/Plugin/Arrayref.pm 
> package Template::Plugin::Arrayref;
> use strict;
> use warnings;
> use Data::Dumper;
> 
> use base 'Template::Plugin';
> 
> sub new {
> 
> 
>     return sub {
> 
>         return [
>             [
>                 { one => 1, two => 2, },
>                 { three => 2, four => 4, },
>             ],
>             [
>                 { xone => 1, xtwo => 2, },
>                 { xthree => 2, xfour => 4, },
>             ],
>         ];
>     }
> }
> 1;
> 
> 
> 
> -- 
> Bill "warknocked" Moseley
> [EMAIL PROTECTED]
> 
> 
> _______________________________________________
> templates mailing list
> [email protected]
> http://lists.template-toolkit.org/mailman/listinfo/templates
> 

-- 
Bill Moseley
[EMAIL PROTECTED]


_______________________________________________
templates mailing list
[email protected]
http://lists.template-toolkit.org/mailman/listinfo/templates

Reply via email to