获取"哈希赋值中奇数个元素"时如何传递参数

Reu*_*ben 3 perl rt

我正在RT(http://bestpractical.com/rt)做一些模板编程,它使用Perl.不幸的是,我偶尔只会和Perl讨价还价.

我正在尝试调用以下开头的子过程:

sub PrepareEmailUsingTemplate {
    my %args = (
        Template => '',
        Arguments => {},
        @_
    );
Run Code Online (Sandbox Code Playgroud)

由于这是lib的一部分,我无法改变它.

我正在做的电话是:

my ($template, $msg) = RT::Interface::Email->PrepareEmailUsingTemplate( 
    Template => 'CCReplyFirstMessage' );
return (0, $msg) unless $template;
Run Code Online (Sandbox Code Playgroud)

而我得到"在/opt/rt4/sbin/../lib/RT/Interface/Email.pm线552哈希分配的元素奇数(/opt/rt4/sbin/../lib/RT /Interface/Email.pm:552),with是sub的第一行.

我知道我在传递参数方面做得很糟糕.我该怎么办呢?

mu *_*ort 11

PrepareEmailUsingTemplate不是类方法,它是一个简单的函数.你想这样称呼它:

my ($template, $msg) = RT::Interface::Email::PrepareEmailUsingTemplate( 
    Template => 'CCReplyFirstMessage' );
return (0, $msg) unless $template;
Run Code Online (Sandbox Code Playgroud)

当你用它调用它时->,你的@_最终将得到三个值:你的两个用于哈希,而你的名字在开头.将其作为类方法调用的结果将是这样的:

my %args = (
    Template => '',
    Arguments => {},
    'RT::Interface::Email::PrepareEmailUsingTemplate',
    Template => 'CCReplyFirstMessage'
);
Run Code Online (Sandbox Code Playgroud)

而那就是你的"散列分配中奇数个元素"错误的来源.


dus*_*uff 8

尝试:

my ($template, $msg) = RT::Interface::Email::PrepareEmailUsingTemplate(Template => 'CCReplyFirstMessage');
Run Code Online (Sandbox Code Playgroud)

该函数不会被写入调用->.