7
votes

Appeler des sous-marins extérieurs et des modules dans Toolkit de modèle sans plug-ins?

J'essaie d'appeler un module externe Perl dans un fichier Toolkit de modèle .tt. Le module que je veux utiliser est util , et je veux appeler util :: prettify_date . J'ai pu inclure ce module à l'aide de l'interface du plugin de Toolkit de modèle: I Configurez la fonction de charge, de nouvelle et d'erreur (comme décrit ici: http://template-toolkit.org/docs/modules/template/plugin.html ) et incluez-le en utilisant [% utilisé util%] .

Cela fonctionne bien, mais je me demandais s'il y a un moyen de Utiliser des modules PERL dans la boîte à outils de modèle sans avoir à repousser-ify. Le problème principal avec la fabrication de plugins est que je dois apporter toutes les fonctions dans util orientées objet (c.-à-d. Accepte Self-auto comme premier argument), ce qui n'a pas vraiment de sens.


0 commentaires

3 Réponses :


6
votes

Avez-vous essayé Utiliser code> ing le module dans un [% perl%] code> bloc?

Maintenant, je voudrais écrire un plugin qui relais, disons, un myorg :: plugin :: util-> prettify_date CODE> TO UTIL :: PRETTIFY_DATE CODE> Après avoir débarrassé du premier argument. Vous pouvez également automatiser la création de ces méthodes: P>

my @to_proxy = qw( prettify_date );

sub new {
    my $class = shift;

    {
        no strict 'refs';
        for my $sub ( @to_proxy) {
            *{"${class}::${sub}"} = sub {
                my $self = shift;
                return "My::Util::$sub"->( @_ );
            }
        }
    }
    bless {} => $class;
}


0 commentaires

17
votes

Vous pouvez également passer des fonctions (c.-à-d. Subroutines) au modèle comme celui-ci:

========================================
Hello my name is Barry, how are u today?
The ultimate answer to life is 42
========================================


0 commentaires

0
votes

Le moyen le plus simple et le plus dangereux d'accomplir est d'utiliser un [% Perl%] code> bloquer et forcer l'évaluation à survenir dans l'espace de nom code> code>

[% PERL %]
package main;
# You can now use any variables and subroutines as though this were in the main namespace
[% END %]


0 commentaires