2012-11-14 37 views
1

我正试图在我的Windows平台上安装scmbug。 我在下面的方法中将哈希视为引用错误。看到“这里”注释,看看它发生了什么。不推荐使用哈希作为参考 - Perl

我应该用每个邮件中的$ mail来代替吗?

我试过这个,但得到了其他错误。话说

全局符号“$邮件”需要明确的包名

如何得到这个固定的?

sub mail_notification_send_mail { 
    my $self = shift; 
    my ($request, $subject, $message, $mailing_list) = (@_); 
    my %mail; 

    # Set values. This permits users to override the default behavior 
    # of Mail::Sendmail 
    %mail = \%{ $request->{ policies }->{ mail_notification }->{ mail_settings } }; 
    %mail->{ 'X-Mailer' } = "Mail::Sendmail version $Mail::Sendmail::VERSION"; HERE 
    %mail->{ Subject } = $subject; HERE 
    %mail->{ Message } = $message; HERE 

    # 
    # Since we just reset %mail to values, we haven't really picked up 
    # the To,From,Reply-To that were computed. We do this next 
    # 

    # Don't blindly ignore the To list that was computed 
    my $mailing_list_to = $self->emails_to_csv($mailing_list->{ To }); 
    %mail->{ To } = $mailing_list_to; HERE 

    # Don't blindly ignore the From list that was computed 
    my $mailing_list_from = $self->emails_to_csv($mailing_list->{ From }); 
    %mail->{ From } = $mailing_list_from; HERE 

    # Don't blindly ignore the 'Reply-To' list that was computed 
    my $mailing_list_replyto = $self->emails_to_csv($mailing_list->{ 'Reply-To' }); 
    %mail->{ 'Reply-To' } = $mailing_list_replyto; HERE 


    if (!sendmail(%mail)) { 
    my $msg = "Sending mail on " . $request->{ name } . 
     " failed. Log error was:\n" . $Mail::Sendmail::error . "\n"; 
    $request->add_result(1, $msg); 
    } 
} 

感谢

回答

3

文档:perldoc perlref

你有一个hashref,但您使用的是哈希的印记。将所有%mail替换为$mail

您有:

%mail = \%{ $request->{ policies }->{ mail_notification }->{ mail_settings } }; 

\%告诉Perl取消引用哈希,并返回一个hashref,但你将其分配到一个哈希值。我敢打赌你也会在那里发出警告。该行应是:以去参考

$mail = $request->{ policies }->{ mail_notification }->{ mail_settings }; ## change all `%mail` to `$mail` 

%mail = %{ $request->{ policies }->{ mail_notification }->{ mail_settings } }; ## change all `%mail->{something}` to `$mail{something}`. 
+0

你的第一行应该是我的%哈希我认为 –

+0

@ Disco3,我已经编辑它并彻底改变了我的答案。我没有注意到他正在将一个hashref分配到一个散列中。不管怎样,谢谢你。 – gpojd

+0

它的工作..谢谢 – Javanator

1

使用$mail->{ ... }。但在你的情况下,你有一个散列%mail,而不是一个引用,所以访问其成员的正确方法是没有取消引用操作符->。一个简单的$mail{...}就足够了。

+1

'%mail'散列正在分配一个hashref,所以OP将需要做更多的工作,而不仅仅是改变它的访问方式。 – gpojd

+0

是的。删除'%mail = \%{...'中的'\'就足够了,就像接受的答案一样。 –