我在RT(http://bestpractical.com/rt)做一些模板编程,它使用Perl.不幸的是,我偶尔只会和Perl讨价还价.
我正在尝试调用以下开头的子过程:
sub PrepareEmailUsingTemplate { my %args = ( Template => '',Arguments => {},@_ );
由于这是lib的一部分,我无法改变它.
我正在做的电话是:
my ($template,$msg) = RT::Interface::Email->PrepareEmailUsingTemplate( Template => 'CCReplyFirstMessage' ); return (0,$msg) unless $template;
我在/opt/rt4/sbin/../lib/RT/Interface/Email.pm第552行获得“哈希分配中奇数个元素.”(/ opt / t4 / sbin /../lib / RT /Interface/Email.pm:552),with是sub的第一行.
我知道我在传递参数方面做得很糟糕.我该怎么办呢?
解决方法
PrepareEmailUsingTemplate
不是类方法,它是一个简单的函数.你想这样称呼它:
my ($template,$msg) = RT::Interface::Email::PrepareEmailUsingTemplate( Template => 'CCReplyFirstMessage' ); return (0,$msg) unless $template;
当您使用 – >来调用它时,您的@_将最终得到三个值:您的两个用于哈希,而类名称在开头.将其作为类方法调用的结果将是这样的:
my %args = ( Template => '','RT::Interface::Email::PrepareEmailUsingTemplate',Template => 'CCReplyFirstMessage' );
而那就是你的“散列分配中奇数个元素”错误的来源.