1

Windows プラットフォームに scmbug をインストールしようとしています。以下のメソッドで Hash を参照エラーとして取得しています。「HERE」注釈を参照して、それがどこで起こっているかを確認してください。

すべての %mail を $mail に置き換える必要がありますか?

これを試しましたが、他のエラーが発生しました。言って

グローバル シンボル "$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);
   }
}

ありがとう

4

2 に答える 2

3

ドキュメンテーション: perldoc perlref

ハッシュ参照がありますが、ハッシュのシジルを使用しています。%mailすべてを に置き換えます$mail

あなたが持っている:

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

\%、ハッシュを逆参照してハッシュ参照を返すように perl に指示しますが、それをハッシュに割り当てています。そこでも警告が出るはずです。行は次のようになります。

$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}`. 
于 2012-11-14T17:46:26.447 に答える
1

$mail->{ ... }逆参照するために使用します。ただし、あなたの場合%mail、参照の代わりにハッシュがあるため、そのメンバーにアクセスする適切な方法は、逆参照 operator を使用しないこと->です。単純$mail{...}に十分です。

于 2012-11-14T17:46:32.393 に答える