summaryrefslogtreecommitdiff
path: root/lib/Template/Stash/XS.pm
blob: ca37c08beefdf124bb32bb3a9dcb6cb472d84603 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#============================================================= -*-Perl-*-
# 
# Template::Stash::XS
# 
# DESCRIPTION
#
#   Perl bootstrap for XS module. Inherits methods from 
#   Template::Stash when not implemented in the XS module.
#
#========================================================================

package Template::Stash::XS;

use Template;
use Template::Stash;

BEGIN {
  require DynaLoader;
  @Template::Stash::XS::ISA = qw( DynaLoader Template::Stash );

  eval {
    bootstrap Template::Stash::XS $Template::VERSION;
  };
  if ($@) {
    die "Couldn't load Template::Stash::XS $Template::VERSION:\n\n$@\n";
  }
}


sub DESTROY {
  # no op
  1;
}


# catch missing method calls here so perl doesn't barf 
# trying to load *.al files 
sub AUTOLOAD {
  my ($self, @args) = @_;
  my @c             = caller(0);
  my $auto	    = $AUTOLOAD;

  $auto =~ s/.*:://;
  $self =~ s/=.*//;

  die "Can't locate object method \"$auto\"" .
      " via package \"$self\" at $c[1] line $c[2]\n";
}

1;

__END__


#------------------------------------------------------------------------
# IMPORTANT NOTE
#   This documentation is generated automatically from source
#   templates.  Any changes you make here may be lost.
# 
#   The 'docsrc' documentation source bundle is available for download
#   from http://www.template-toolkit.org/docs.html and contains all
#   the source templates, XML files, scripts, etc., from which the
#   documentation for the Template Toolkit is built.
#------------------------------------------------------------------------

=head1 NAME

Template::Stash::XS - Experimetal high-speed stash written in XS

=head1 SYNOPSIS

    use Template;
    use Template::Stash::XS;

    my $stash = Template::Stash::XS->new(\%vars);
    my $tt2   = Template->new({ STASH => $stash });

=head1 DESCRIPTION

This module loads the XS version of Template::Stash::XS. It should 
behave very much like the old one, but run about twice as fast. 
See the synopsis above for usage information.

Only a few methods (such as get and set) have been implemented in XS. 
The others are inherited from Template::Stash.

=head1 NOTE

To always use the XS version of Stash, modify the Template/Config.pm 
module near line 45:

 $STASH    = 'Template::Stash::XS';

If you make this change, then there is no need to explicitly create 
an instance of Template::Stash::XS as seen in the SYNOPSIS above. Just
use Template as normal.

Alternatively, in your code add this line before creating a Template
object:

 $Template::Config::STASH = 'Template::Stash::XS';

To use the original, pure-perl version restore this line in 
Template/Config.pm:

 $STASH    = 'Template::Stash';

Or in your code:

 $Template::Config::STASH = 'Template::Stash';

You can elect to have this performed once for you at installation
time by answering 'y' or 'n' to the question that asks if you want
to make the XS Stash the default.

=head1 BUGS

Please report bugs to the Template Toolkit mailing list
templates@template-toolkit.org

As of version 2.05 of the Template Toolkit, use of the XS Stash is
known to have 2 potentially troublesome side effects.  The first
problem is that accesses to tied hashes (e.g. Apache::Session) may not
work as expected.  This should be fixed in an imminent release.  If
you are using tied hashes then it is suggested that you use the
regular Stash by default, or write a thin wrapper around your tied
hashes to enable the XS Stash to access items via regular method
calls.

The second potential problem is that enabling the XS Stash causes all
the Template Toolkit modules to be installed in an architecture
dependant library, e.g. in

    /usr/lib/perl5/site_perl/5.6.0/i386-linux/Template

instead of 

    /usr/lib/perl5/site_perl/5.6.0/Template

At the time of writing, we're not sure why this is happening but it's
likely that this is either a bug or intentional feature in the Perl
ExtUtils::MakeMaker module.  As far as I know, Perl always checks the
architecture dependant directories before the architecture independant
ones.  Therefore, a newer version of the Template Toolkit installed
with the XS Stash enabled should be used by Perl in preference to any
existing version using the regular stash.  However, if you install a 
future version of the Template Toolkit with the XS Stash disabled, you
may find that Perl continues to use the older version with XS Stash 
enabled in preference.

=head1 AUTHORS

Andy Wardley E<lt>abw@tt2.orgE<gt>

Doug Steinwand E<lt>dsteinwand@citysearch.comE<gt>

=head1 VERSION

Template Toolkit version 2.10, released on 24 July 2003.



=head1 COPYRIGHT

  Copyright (C) 1996-2003 Andy Wardley.  All Rights Reserved.
  Copyright (C) 1998-2002 Canon Research Centre Europe Ltd.

This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.



=head1 SEE ALSO

L<Template::Stash|Template::Stash>