首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不推荐使用Hash作为引用- Perl

不推荐使用Hash作为引用- Perl
EN

Stack Overflow用户
提问于 2012-11-15 01:45:11
回答 2查看 2.7K关注 0票数 1

我正在尝试在我的windows平台上安装scmbug。在下面的方法中,我将Hash作为引用错误。请参阅"HERE“注释以查看它发生的位置。

我应该用$mail替换所有的%mail吗?

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

全局符号"$mail“需要显式的包名

如何解决这个问题?

代码语言:javascript
复制
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);
   }
}

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-15 01:46:26

文档:perldoc perlref

您有一个hashref,但您正在使用一个hash的符号。将所有%mail替换为$mail

您必须:

代码语言:javascript
复制
%mail = \%{ $request->{ policies }->{ mail_notification }->{ mail_settings } };

\%告诉perl解除对散列的引用并返回一个散列引用,但是您将其分配给一个散列。我敢打赌你也会收到警告的。这一行应该是:

代码语言:javascript
复制
$mail = $request->{ policies }->{ mail_notification }->{ mail_settings }; ## change all `%mail` to `$mail`

代码语言:javascript
复制
%mail = %{ $request->{ policies }->{ mail_notification }->{ mail_settings } }; ## change all `%mail->{something}` to `$mail{something}`. 
票数 3
EN

Stack Overflow用户

发布于 2012-11-15 01:46:32

使用$mail->{ ... }来解除引用。但在本例中,您使用的是散列%mail而不是引用,因此访问其成员的正确方法是不使用取消引用操作符->。一个简单的$mail{...}就足够了。

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

https://stackoverflow.com/questions/13384287

复制
相关文章

相似问题

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