I realized that the hash implementation isn't complete for objects either. And in correcting this, i realized that there was a better location for the array changes i made in the last patch:

--- /usr/lib/perl5/site_perl/5.6.1/i386-linux/Template/Stash.orig.pm Fri Dec 5 17:06:17 2003
+++ /usr/lib/perl5/site_perl/5.6.1/i386-linux/Template/Stash.pm Tue Dec 9 18:24:43 2003
@@ -613,14 +613,28 @@
die $@ if ref($@) || ($@ !~ /Can't locate object method/);


# failed to call object method, so try some fallbacks
- if (UNIVERSAL::isa($root, 'HASH')
- && defined($value = $root->{ $item })) {
- return $value unless ref $value eq 'CODE'; ## RETURN
- @result = &$value(@$args);
+ if (UNIVERSAL::isa($root, 'HASH') ) {
+ if( defined($value = $root->{ $item })) {
+ return $value unless ref $value eq 'CODE'; ## RETURN
+ @result = &$value(@$args);
+ }
+ elsif ($value = $HASH_OPS->{ $item }) {
+ @result = &$value($root, @$args);
+ }
}
- elsif (UNIVERSAL::isa($root, 'ARRAY')
- && ($value = $LIST_OPS->{ $item })) {
- @result = &$value($root, @$args);
+ elsif (UNIVERSAL::isa($root, 'ARRAY') ) {
+ if( $value = $LIST_OPS->{ $item }) {
+ @result = &$value($root, @$args);
+ }
+ elsif( $item =~ /^-?\d+$/ ) {
+ $value = $root->[$item];
+ return $value unless ref $value eq 'CODE'; ## RETURN
+ @result = &$value(@$args); ## @result
+ }
+ elsif ( ref $item eq 'ARRAY' ) {
+ # array slice
+ return [EMAIL PROTECTED]@$item]]; ## RETURN
+ }
}
elsif ($value = $SCALAR_OPS->{ $item }) {
@result = &$value($root, @$args);



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

Reply via email to