菜鸟问题:以下代码有很些地方不明白,请高手指教 !!!跪求高手指教!!!!

garry1919 2007-10-17 05:21:08
本人刚学perl web开发,快2个礼拜了,同事给的都是O'REILLY的英文书,自认英文水平太低.....实在难以翻译,
所以就只看代码,最后弄的一知半解,所以请高手多多指教,小弟在问题中如果问的不对请指出...再一次谢谢!!


code 1:
sub new
{
my $pkg = shift;
my $self;
{ #不明白1
my %hash;
$self = bless(\%hash, $pkg); #不明白2
}
$self->{ierrormsg} = 0;
$self->{errormsg} = [];
$self->{iwarnmsg} = 0;
$self->{warnmsg} = [];
return $self;
}

code 2:
sub xxx
{
$self = shift; #不明白3

.
.
.
.
return $self;
}


code 3:
use CGI qw/:standard/;
$cgi = new CGI;
$cgi->header(-charset => $data{charset}); #不明白4



以上是一个模块的new方法,我从别人网站上copy的来的,有些地方不是很明白,希望高手能指教我下
不明白1:为什么在方法里面用一个"{}"块括起 "my %hash; $self = bless(\%hash, $pkg);"这两行代码?这样做有什么用处?

不明白2:"$self = bless(\%hash, $pkg);"这句代码应该怎么解释,是不是用$self指针引用一个hash?那为什么不直接写$self = /%hash?

不明白3:"$self"这个在perl中是怎么理解的,我看过很多方法(sub xxx) 第一句都是写$self = shift;这句话该怎么解释?

不明白4:请问"$cgi->header(-charset => $data{charset});"怎么理解? header方法中的参数"-charset => $data{charset}"是不是一个HASH?还是别的什么?为什么charset前面有个"-"号?
符号"=>",除了在创建Hash以外还有什么作用吗?




...全文
93 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CunningBoy 2007-10-23
  • 打赏
  • 举报
回复
不明点1:
{}括起来表示一段子程序,在{}中定义的变量%hash只在{}中使用,如果在{}外面使用%hash,则{}外面的%hash是一个新的变量和{}中的%hash无关。

不明点3:
$self = shift 等价于 $self = shift @_ 即将子程序的第一个参数传递给$self.
例如:

package Test;
sub new{
my $self;
$self->{name} = 0;
.
.
.
}

sub setName{
my $self = shift; #取第一个参数
my $name = shift; #取第二个参数

$self->{name} = $name;
.
.
}

可以这样调用setName函数:
my $test = new Test;
$test->setName("TestName");

setName函数内部的$self指向的就是$test这个对象。Perl通过这样的方式实现面向对象编程。

2,204

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧