这是我从
开始的#$Id: MultiMarkdown.pm 4103 2009-03-02 20:41:50Z andrew $
package Template::Plugin::MultiMarkdown;
use strict;
use base qw (Template::Plugin::Filter);
use Text::MultiMarkdown;
our $VERSION = 0.03;
sub init {
my $self = shift;
$self->{_DYNAMIC} = 1;
$self->install_filter($self->{_ARGS}->[0] || 'multimarkdown');
return $self;
}
sub filter {
my ($self, $text, $args, $config) = @_;
my $m = Text::MultiMarkdown->new(%{$config || {}});
return $m->markdown($text);
}
1;
我想更改对Perl moudule Text::MultiMarkdown
的引用
使用可执行文件/usr/local/bin/multimarkdown
我想我需要改变:
use Text::MultiMarkdown;
要
use IPC::run3
然后my $m
行涉及对run3
的调用,但之后我就输了。
我已经找到了一些关于如何在Template Toolkit邮件列表和Perl Monks上编写过滤器的提及,但在这两种情况下,答案都假设我知道一些我不知道的事情并且它已经完成了我的头,因此请求。
我之前问了一个类似的问题,但给出的答案似乎并不适用于使用外部程序。
答案 0 :(得分:3)
这是一个过滤器的简单示例,该过滤器调用外部程序(perl
)以用“Bye”替换所有出现的“Hello”。它使用IPC::Run3
:
package Template::Plugin::MultiMarkdown;
use strict;
use base qw (Template::Plugin::Filter);
use IPC::Run3;
our $VERSION = 0.03;
sub init {
my $self = shift;
$self->{_DYNAMIC} = 1;
$self->install_filter($self->{_ARGS}->[0] || 'multimarkdown');
return $self;
}
sub filter {
my ($self, $text, $args, $config) = @_;
my $out;
run3 ['perl', '-pE', 's/Hello/Bye/g'], \$text, \$out;
return $out;
}
答案 1 :(得分:0)
您的想法和设计是错误的。您不能将任何子类的范围扩展到其父级之外。重载方法以使用系统调用是非常糟糕的。