Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Passing arguments to subroutines using Template Toolkit

by elbie (Deacon)
on Nov 30, 2001 at 01:00 UTC ( #128457=perlquestion: print w/replies, xml ) Need Help??
elbie has asked for the wisdom of the Perl Monks concerning the following question:

Using the process method in the Template Toolkit, I often want to call a subroutine with arguments, as follows:

$some_var = 'Hello world!'; $my_templ->process( "$TEMPLATE_DIR/hello_world.html", { 'filler' => \&some_sub( $some_var ) } );

But when I do that, I get ARRAY(0x84ab2c30) or similar where the replacement happens in the output.

Typically, I've been getting around this by calling the subroutine beforehand:

$some_var = &some_sub( 'Hello world!' ); $my_templ->process( "$TEMPLATE_DIR/hello_world.html", { 'filler' => $some_var } );
but I'd like to avoid this if I can. What is the "proper" way to pass variables?

elbieelbieelbie

Replies are listed 'Best First'.
Re: Passing arguments to subroutines using Template Toolkit
by guha (Priest) on Nov 30, 2001 at 01:30 UTC
    Never worked with TT but wouldn't this work ??
    { 'filler' => &some_sub( $some_var ) } );
    HTH
      Grr. Of course this works. sigh. I think I spent too much time looking at the first page of the TT perldoc where it tells me to pass it as a reference. I tried every combination of \&some_sub I could think of...

      elbieelbieelbie

        You only need to pass the sub as a reference if you plan to call it from within the template. Passing it as a ref lets you do this in your template:
        [% filler(some_var) %]
        Personally, I like to avoid callbacks from within templates when possible, but this can be useful for things like passing in a subroutine that escapes HTML characters.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://128457]
Approved by root
help
Chatterbox?
[TStanley]: I'm sitting in the airport in Tampa, Florida at the moment, getting ready to head home.
[talexb]: TStanley I'm flying to Vegas in two weeks time. After that flights leaving Vegas and Phoenix are late at night .. I've been hearing that it gets so hot that the air isn't dense enough for planes to take off. Weird. Guess you won't have that problem.
[Corion]: Yay, vacation time now - one week off work (but a Perl workshop in the middle ;)) )
[talexb]: TStanley I just realized that I was in your area for a convention back in April. We were at the high school for the weekend, the one with the long driveway. Nice spot.

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (11)
As of 2017-06-23 14:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    How many monitors do you use while coding?















    Results (548 votes). Check out past polls.