首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用调用外部程序来替换perl模块的使用?

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

Stack Overflow用户
提问于 2016-12-21 22:19:42
回答 2查看 106关注 0票数 2

下面是我要讲的

代码语言:javascript
复制
#$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

我想我需要改变:

代码语言:javascript
复制
use Text::MultiMarkdown; 

代码语言:javascript
复制
use IPC::run3

然后my $m行需要调用run3,然后我就迷路了。

我已经发现了一些关于如何在Template Toolkit邮件列表和Perl Monks上编写过滤器的内容,但是在这两种情况下,答案都假设我知道一些我不知道的东西,它就在我的头上,因此这里提出了请求。

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

EN

回答 2

Stack Overflow用户

发布于 2016-12-21 23:18:49

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

代码语言:javascript
复制
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;
}
票数 3
EN

Stack Overflow用户

发布于 2016-12-23 15:22:09

你的想法和设计都错了。不能将任何子类的权限扩展到它的父类之外。重载一种使用系统调用的方法是可怕的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41272871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档