Re: protecting access to object instance fields?

Stuart Johnston <[email protected]> Mon, 11 Feb 2013 11:35:38 -0600
Newsgroups gmane.comp.lang.perl.modules.template-toolkit
Message-ID <[email protected]>
On 2/11/2013 10:54 AM, E R wrote:
> When I have an object (e.g. blessed hash) in the stash, I'd like to
> prevent TT from accessing any of the hash fields directly. It can still
> access the method functions.
>
> A simple example - suppose the TT template looks like:
>
>    [% obj.the_time %]
>    [% obj._unix_time %]
>
> and in the stash 'obj' is a blessed hash:
>
> package foo;
>
> sub new { bless { _unix_time => time }, shift }
> sub the_time { ... }
>
> I'd like the first GET to succeed and the second one to either fail,
> raise and exception, return the empty string or something like that.
>
> Is this possible?

This is already the default. Vars that start with '.' or '_' are 
considered private, and ignored.  If you want to die, rather than 
getting undef, add STRICT => 1 to your Template->new.