将已有程序子程序编辑为包,调用时候的问题
时间:2011-01-20
来源:互联网
package Util::Mail;
use strict;
use warnings;
use Net::SMTP;
sub new
{
my($class,$mtahost,$mtaport)=@_;
my $smtp = Net::SMTP->new('Host'=>$mtahost,'Port'=>$mtaport)||die "[WARN] Can't connect to SMTP host\n";
return $smtp;}
sub sendm
{
my ($smtp,$msg)=@_;
$smtp->mail("monitor\@dangdang.com");
$smtp->recipient("jsliyan\@dangdang.com");
$smtp->data();
$smtp->datasend("From: Server Monitor <monitor\@dangdang.com>\n");
$smtp->datasend("To: SA Team <sa\@dangdang.com>\n");
$smtp->datasend("Subject: Server Warnings\n");
$smtp->datasend("\n");
for (@$msg) {
$smtp->datasend("$_\n");
}
$smtp->dataend();
$smtp->quit;
}
1;
使用程序调用的时候:
my $mail=Util::Mail->new('127.0.0.1','25');
$mail->Util::Mail::sendm($warns);
可以实现,如果换成下:
my $mail=Util::Mail->new('127.0.0.1','25');
$mail->sendm($warns); 就报:Can't locate object method "sendm" via package "Net::SMTP"
请问有其他写法可以实现调用吗
作者: liyangole 发布时间: 2011-01-20
{
my ($smtp,$msg)=@_;
在目标方法里,第一个参数是$self,要shift出来。
作者: 兰花仙子 发布时间: 2011-01-20
了解了。还有就是我用那个调用必需是这样才行,$mail->Util::Mail::sendm($warns)
不可以用$mail->sendm($warns).还用其他写法可行吗?
作者: liyangole 发布时间: 2011-01-20
所以Util::Mail->new出来的其实不是一个Util::Mail,而是一个Net::SMTP
作者: yiten 发布时间: 2011-01-20
一针见血 谢谢。
作者: liyangole 发布时间: 2011-01-20
这样祈福以后,那个sendm方法调用就报 Can't locate object method "mail" via package "Util::Mail" ,这个方法写的问题了。请帮忙看看
作者: liyangole 发布时间: 2011-01-20
- package Util::Mail;
-
- use strict;
- use warnings;
- use Net::SMTP;
-
- sub new
- {
- my ($class,$mtahost,$mtaport) = @_;
- my $smtp = Net::SMTP->new(Host=>$mtahost,Port=>$mtaport,Debug=>1) || die "[WARN] Can't connect to SMTP host\n";
- bless {'smtp'=>$smtp},$class;
- }
-
- sub sendm
- {
- my $self = shift;
- my $msg = shift;
- my $smtp=$self->{smtp};
- $smtp->mail("monitor\@dangdang.com");
- $smtp->recipient("jsliyan\@dangdang.com");
- $smtp->data();
- $smtp->datasend("From: Server Monitor <monitor\@dangdang.com>\n");
- $smtp->datasend("To: SA Team <sa\@dangdang.com>\n");
- $smtp->datasend("Subject: Server Warnings\n");
- $smtp->datasend("\n");
- for (@$msg) {
- $smtp->datasend("$_\n");
- }
- $smtp->dataend();
- $smtp->quit;
- }
-
- 1;
- use strict;
- use Util::Mail;
-
- my $s = Util::Mail->new('smtp.xxx.com',25);
- $s->sendm(["hello","world"]);
作者: 兰花仙子 发布时间: 2011-01-20
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28