如何用调用外部程序来代替perl模块的使用?

如何用调用外部程序来代替perl模块的使用?,perl,filter,perl-module,template-toolkit,Perl,Filter,Perl Module,Template Toolkit,我从这里开始 #$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; $sel

我从这里开始

#$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模块的引用 使用可执行文件
/usr/local/bin/multimarkdown

我想我需要改变:

use Text::MultiMarkdown; 

然后,
my$m
行涉及调用
run3
,但是我迷路了

我发现有人提到如何在TemplateToolkit邮件列表和Perl Monks上编写过滤器,但在这两种情况下,答案都假设我知道一些我不知道的东西,这就超出了我的理解范围,因此这里有一个请求


我之前问过类似的问题,但给出的答案似乎不适用于使用外部程序。

下面是一个简单的过滤器示例,它调用外部程序(
perl
)以将所有出现的“Hello”替换为“Bye”。它使用:


你的想法和设计是错误的。不能将任何子类的权限扩展到其父类之外。重载方法以使用系统调用是很可怕的。

我不确定您是否正确,但如果它是对文件的静态调用(不会根据您计算的内容进行动态更改),那么您应该能够调用如下内容:使用“/usr/local/bin/multimarkdown”;我认为,Use将尝试将参数解析为perl脚本。看,我看不出有什么用。我希望你有一个好的理由?将一个简单的Perl过程调用替换为一些需要创建一个或两个新进程并安排传递参数和接收结果的代码似乎是一个非常糟糕的主意。您的
multimarkdown
甚至接受简单的文本输入,还是需要一个文件?简单的原因是多年来没有更新过perl版本的MMD。作者弗莱彻·佩妮(Fletcher Penny)用一种固定语法(我想就是这个词)编写了当前版本。它接受标准输入,将输出写入标准输出。现有版本编写不符合xhtml的代码。@SherwoodBotsford:在你的问题中这样说很好。通常,一个好的答案是发现OP真正需要什么,并提供它,而不是他们要求什么。我想你需要多重降价,但降价不行?您是否提出了
Text::MultiMarkdown
的错误报告?如果我把它修好,你会改变主意吗?
use 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;
}