3

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/rt4/sbin/../lib/RT /Interface/Email.pm:552) で、サブ行の最初の行です。

私はパラメータを渡す際に奇妙なことをしていることを知っています。どのように渡せばいいですか?

4

3 に答える 3

11

PrepareEmailUsingTemplateクラスメソッドではなく、単純な関数です。次のように呼び出します。

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

で呼び出すと、->最終@_的に3 つの値が得られます。ハッシュ用の 2 つと先頭のクラス名です。これをクラス メソッドとして呼び出すと、次のようになります。

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

そして、それが「ハッシュ割り当ての奇数の要素」エラーの原因です。

于 2011-06-30T04:50:31.277 に答える
8

試す:

my ($template, $msg) = RT::Interface::Email::PrepareEmailUsingTemplate(Template => 'CCReplyFirstMessage');

関数は、で呼び出されるように記述されていません->

于 2011-06-30T04:43:57.930 に答える
0

subをクラスメソッドとして呼び出す場合は、追加の暗黙的なクラス引数を期待する必要があります。

my $class = shift;
my %args = ( ..., @_ );
于 2011-06-30T04:57:56.793 に答える