Server IP : 149.255.58.128 / Your IP : 216.73.216.193
System : Linux cloud516.thundercloud.uk 5.14.0-427.26.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jul 17 15:51:13 EDT 2024 x86_64
PHP Version : 8.2.28
Disable Function : allow_url_include, apache_child_terminate, apache_setenv, exec, passthru, pcntl_exec, posix_kill, posix_mkfifo, posix_getpwuid, posix_setpgid, posix_setsid, posix_setuid, posix_setgid, posix_seteuid, posix_setegid, posix_uname, proc_close, proc_get_status, proc_open, proc_terminate, shell_exec, show_source, system
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Upload Files :
Command :
Current File : /usr/local/lib64/perl5/5.32/Template/Plugin//Scalar.pm
#============================================================= -*-Perl-*-
#
# Template::Plugin::Scalar
#
# DESCRIPTION
# Template Toolkit plugin module which allows you to call object methods
# in scalar context.
#
# AUTHOR
# Andy Wardley <abw@wardley.org>
#
# COPYRIGHT
# Copyright (C) 2008-2022 Andy Wardley. All Rights Reserved.
#
# This module is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
#============================================================================
package Template::Plugin::Scalar;
use base 'Template::Plugin';
use strict;
use warnings;
use Template::Exception;
use Scalar::Util qw();
our $VERSION = '3.100';
our $MONAD = 'Template::Monad::Scalar';
our $EXCEPTION = 'Template::Exception';
our $AUTOLOAD;
sub load {
my $class = shift;
my $context = shift;
# define .scalar vmethods for hash and list objects
$context->define_vmethod( hash => scalar => \&scalar_monad );
$context->define_vmethod( list => scalar => \&scalar_monad );
return $class;
}
sub scalar_monad {
# create a .scalar monad which wraps the hash- or list-based object
# and delegates any method calls back to it, calling them in scalar
# context, e.g. foo.scalar.bar becomes $MONAD->new($foo)->bar and
# the monad calls $foo->bar in scalar context
$MONAD->new(shift);
}
sub new {
my ($class, $context, @args) = @_;
# create a scalar plugin object which will lookup a variable subroutine
# and call it. e.g. scalar.foo results in a call to foo() in scalar context
my $self = bless {
_CONTEXT => $context,
}, $class;
return $self;
}
sub AUTOLOAD {
my $self = shift;
my $item = $AUTOLOAD;
$item =~ s/.*:://;
return if $item eq 'DESTROY';
# lookup the named values
my $stash = $self->{ _CONTEXT }->stash;
my $value = $stash->{ $item };
if (! defined $value) {
die $EXCEPTION->new( scalar => "undefined value for scalar call: $item" );
}
elsif (ref $value eq 'CODE') {
$value = $value->(@_);
}
return $value;
}
package Template::Monad::Scalar;
our $EXCEPTION = 'Template::Exception';
our $AUTOLOAD;
sub new {
my ($class, $this) = @_;
bless \$this, $class;
}
sub AUTOLOAD {
my $self = shift;
my $this = $$self;
my $item = $AUTOLOAD;
$item =~ s/.*:://;
return if $item eq 'DESTROY';
my $method;
if (Scalar::Util::blessed($this)) {
# lookup the method...
$method = $this->can($item);
}
else {
die $EXCEPTION->new( scalar => "invalid object method: $item" );
}
# ...and call it in scalar context
my $result = $method->($this, @_);
return $result;
}
1;
__END__
=head1 NAME
Template::Plugin::Scalar - call object methods in scalar context
=head1 SYNOPSIS
[% USE scalar %]
# TT2 calls object methods in array context by default
[% object.method %]
# force it to use scalar context
[% object.scalar.method %]
# also works with subroutine references
[% scalar.my_sub_ref %]
=head1 DESCRIPTION
The Template Toolkit calls user-defined subroutines and object methods
using Perl's array context by default. This plugin module provides a way
for you to call subroutines and methods in scalar context.
=head1 AUTHOR
Andy Wardley E<lt>abw@wardley.orgE<gt> L<http://wardley.org/>
=head1 COPYRIGHT
Copyright (C) 2008-2022 Andy Wardley. All Rights Reserved.
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::Plugin>
=cut
# Local Variables:
# mode: perl
# perl-indent-level: 4
# indent-tabs-mode: nil
# End:
#
# vim: expandtab shiftwidth=4:
Name |
Size |
Last Modified |
Owner / Group |
Permissions |
Options |
.. | -- | February 06 2024 22:25:04 | 0 / root | 0755 | |
| | | | | |
Assert.pm | 3.426 KB | July 26 2022 06:42:11 | 0 / root | 0444 | |
Datafile.pm | 4.4 KB | July 26 2022 06:42:21 | 0 / root | 0444 | |
Date.pm | 11.219 KB | July 26 2022 07:09:42 | 0 / root | 0444 | |
Directory.pm | 10.898 KB | July 26 2022 06:43:06 | 0 / root | 0444 | |
Dumper.pm | 3.655 KB | July 25 2022 18:57:15 | 0 / root | 0444 | |
File.pm | 10.917 KB | July 26 2022 07:10:13 | 0 / root | 0444 | |
Filter.pm | 9.629 KB | July 26 2022 06:43:36 | 0 / root | 0444 | |
Format.pm | 1.789 KB | July 26 2022 06:43:45 | 0 / root | 0444 | |
HTML.pm | 5.87 KB | July 26 2022 06:43:59 | 0 / root | 0444 | |
Image.pm | 11.433 KB | July 26 2022 07:10:56 | 0 / root | 0444 | |
Iterator.pm | 1.954 KB | July 26 2022 06:44:16 | 0 / root | 0444 | |
Math.pm | 3.994 KB | July 26 2022 06:44:36 | 0 / root | 0444 | |
Pod.pm | 1.611 KB | July 26 2022 06:44:44 | 0 / root | 0444 | |
Procedural.pm | 3.595 KB | July 25 2022 18:57:15 | 0 / root | 0444 | |
Scalar.pm | 3.675 KB | July 26 2022 06:45:02 | 0 / root | 0444 | |
String.pm | 17.692 KB | July 26 2022 06:45:13 | 0 / root | 0444 | |
Table.pm | 12.409 KB | July 26 2022 07:13:22 | 0 / root | 0444 | |
URL.pm | 5.665 KB | July 26 2022 07:13:38 | 0 / root | 0444 | |
View.pm | 2.399 KB | July 26 2022 06:45:43 | 0 / root | 0444 | |
Wrap.pm | 3.177 KB | July 26 2022 06:45:52 | 0 / root | 0444 | |