下面是我要讲的
#$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上编写过滤器的内容,但是在这两种情况下,答案都假设我知道一些我不知道的东西,它就在我的头上,因此这里提出了请求。
我之前也问过一个类似的问题,但是给出的答案似乎不适用于使用外部程序。
发布于 2016-12-21 23:18:49
下面是一个简单的过滤器示例,它调用外部程序( perl )将所有出现的"Hello“替换为"Bye”。它使用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;
}发布于 2016-12-23 15:22:09
你的想法和设计都错了。不能将任何子类的权限扩展到它的父类之外。重载一种使用系统调用的方法是可怕的。
https://stackoverflow.com/questions/41272871
复制相似问题