Perl小结

Perl的类与对象

以“菜鸟教程”上的例子进行简单说明:

#!/usr/bin/perl
 
# 下面是简单的类实现
package MyClass;
 
sub new
{
   print "MyClass::new called\n";
   my $type = shift;            # 包名
   my $self = {};               # 引用空哈希
   return bless $self, $type;   
}
 
sub DESTROY
{
   print "MyClass::DESTROY called\n";
}
 
sub MyMethod
{
   print "MyClass::MyMethod called!\n";
}
 
 
# 继承实现
package MySubClass;
 
@ISA = qw( MyClass );
 
sub new
{
   print "MySubClass::new called\n";
   my $type = shift;            # 包名
   my $self = MyClass->new;     # 引用空哈希
   return bless $self, $type;  
}
 
sub DESTROY
{
   print "MySubClass::DESTROY called\n";
}
 
sub MyMethod
{
   my $self = shift;
   $self->SUPER::MyMethod();
   print "   MySubClass::MyMethod called!\n";
}
 
# 调用以上类的主程序
package main;
 
print "调用 MyClass 方法\n";
 
$myObject = MyClass->new();
$myObject->MyMethod();
 
print "调用 MySubClass 方法\n";
 
$myObject2 = MySubClass->new();
$myObject2->MyMethod();
 
print "创建一个作用域对象\n";
{
  my $myObject2 = MyClass->new();
}
# 自动调用析构函数
 
print "创建对象\n";
$myObject3 = MyClass->new();
undef $myObject3;
 
print "脚本执行结束...\n";
# 自动执行析构函数

上述代码中,new是构造函数,$self是一个hash的引用,当创建一个对象时,便会先创建一个hash,并用$self引用之。而$type被赋值为类名。通过bless函数,可将创建的hash引用和类名相关联,并将引用返回,即创建得一个对象。

其中shift是对默认数组(参数数组)进行shift操作。


正则表达式

CGI中可出现这样的写法(引自“菜鸟教程”),如下为test.cgi文件:

#!/usr/bin/perl
 
local ($buffer, @pairs, $pair, $name, $value, %FORM);
# 读取文本信息
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "GET")
{
   $buffer = $ENV{'QUERY_STRING'};
}
# 读取 name/value 对信息
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}
$name = $FORM{name};
$url  = $FORM{url};
 
print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print '<meta charset="utf-8">';
print '<title>Farmer(farmer.com)</title>';
print "</head>";
print "<body>";
print "<h2>$name网址:$url</h2>";
print "</body>";
print "</html>";
 
1;

比如输入如下url:

/cgi-bin/test.cgi?name=FJ&url=http://www.fj.com

或输入如下test.html:   

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Farmer(farmer.com)</title>
</head>
<body>
<form action="/cgi-bin/test.cgi" method="get">
站点名称: <input type="text" name="name">  <br />
 
站点 URL: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>

 cgi文件中的

 $value =~ s/%(..)/pack("C", hex($1))/eg;

可以进行编码的转换,pack函数进行组装,使用参数“C”表示char,hex($1)是将匹配到的第一个子串进行16进制转换,eg可参见正则表达式替换规则的说明。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FarmerJohn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值