Perl In 24
目 录
译者序
前言
第一部分 Perl基础
第1学时 Perl入门 3
1.1 安装Perl 3
1.1.1 等一等,也许你已经安装了Perl 4
#perl -v
1.1.2 在Windows 95/98/NT上安装Perl 5
1.1.3 在UNIX上安装Perl 6
1.1.4 在Macintosh系统上安装Perl 7
1.2 文档资料 7
1.2.1 某些特殊的文档资料举例 8
1.2.2 如果无法找到文档该怎么办 9
1.3 编写你的第一个Perl程序 9
1.3.1 键入程序 9
#!/usr/bin/perl
print "Hello, World\n";
1.3.2 运行程序 9
1.3.3 程序正确将会发生什么情况 10
1.3.4 Perl程序的具体运行过程 10
1.3.5 必须知道的一些情况 11
#man perlstyle > 建议打开-w 即warning
第2学时 Perl的基本构件:数字和字符串 14
2.1 直接量 14
字符串加双引号和单引号的主要差别是:使用单引号的字符串含义是非常直观的,单
引号字符串中的每个字符就是表示它自己的含义。在双引号中的字符串中, P e r l要查看是否存
在变量名或转义序列。
$name="James";
print "I met $name\n"; #James will be printed
print 'I met $name'; #won't print James
print "i met \$name'; #neither will this
2.1.1 数字 14
2.1.2 字符串 15
\ n 换行
\ r 回车
#如何砍掉\r. $r=
\ t 制表符
\ b 退格
\ u 将下一个字符改为大写
\ l 将下一个字符改为小写
\ \ 直接量反斜杠字符
\ ' 用单引号( ' ')括起来的字符串中的直接量'
\ " 用引号括起来的字符串中的直接量"
2.2 标量变量 , such as $value, 大小写敏感
P e r l中的标量变量在你使用它们之前,不必预先进行声明或
初始化。若要创建一个标量变量,只要使用它就行了。
2.3 表达式和运算符 18
2.3.1 基本运算符 18
2.3.2 数字运算符 19
5 + $t 加 5与$ t相加的和
$y - $x 减 $ y与$ x的差
$e * $pi 乘 $ e与$ p i的积
$f / 6 除 $ f除以6得出的商
24 % 5 求余数2 4除以5得出的余数( 4)
$x = $x + 2; ==> $x += 2;
$x = $x - 2; ==> $x -= 2;
4 * * 2 取幂取4的二次方
2.3.3 字符串运算符 19
2.4 其他运算符 20
r a n d r a n d(5) 返回从0到小于该参数值之间的一个随机数
字。如果该参数被省略,则返回0至1之间的
一个数字
2.4.1 单参数运算符 20
2.4.2 递增和递减 21
2.4.3 尖括号运算符 21
print "what is ur size?";
$size=
2.4.4 其他赋值运算符 22
2.4.5 关于字符串和数字的一些说明 22
[from BlackBook]
逻辑与4.2.20 和逻辑或4.2.21
&&; ||;
print "enter positive number up to 100\n";
while (<>) {
chomp;
if ($_>0 && $_<100 {
print "thank you\n";
}
其他运算符: .. ?: += -= <> ==> <>是
第3学时 控制程序流 26
3.1 语句块 26
3.2 if语句 27
3.2.1 其他关系运算符 28
3.2.2 “真”对于Perl意味着什么 29
3.2.3 逻辑运算符 30
3.3 循环 32
3.3.1 用while进行循环 32
3.3.2 使用for循环 33
for ($a=0; $a<10; $a=$a+2) {
xxx}
,f o r语句的3个组成部分中的每一个都是可有可无的,但是两个分号是必不可少的。
for ( ; $a<10; ) {}
3.4 其他流控制工具 33
3.4.1 奇特的执行顺序 33
3.4.2 明细控制 34
3.4.3 标号 35 label
3.4.4 退出Perl 35
last 推出当前loop; exit;
Note 1:
请注意,在上面这个例子中,为了将一个值赋予$ r,使用一个赋值运算
符=。为了测试$ r的值,使用等式运算符= =。这两个运算符有着很大的差别,
其作用是不同的。在你的程序中不要混淆它们的用法,因为调试非常困难。
请记住,运算符=用于赋值,而= =则用于测试一个等式。
<<<比较数字>>>
= = $x == $y 如果$ x等于$ y,则为真
> $x > $y 如果$ x大于$ y,则为真
< $x < $y 如果$ x小于$ y,则为真
>= $x >= $y 如果$ x大于或者等于$ y,则为真
< = $x <= $y 如果$ x小于或者等于$ y,则为真
! = $x != $y 如果$ x不等于$ y,则为真
<<<比较字母>>>
e q $s eq $t 如果$ s等于$ t,则为真
g t $s gt $t 如果$ s大于$ t,则为真
l t $s lt $t 如果$ s小于$ t,则为真
g e $s ge $t 如果$ s大于或者等于$ t,则为真
l e $s le $t 如果$ s小于或者等于$ t,则为真
n e $s ne $t 如果$ s不等于$ t,则为真
#!/usr/bin/perl -w
############## Structure IF###################
$im=int(rand 10);
print "Pick a number:";
$guess=;
chomp $guess; #don't forget to remove the new line.
if ($guess>$im) {
print "you guess too high\n"
} elsif ($guess<$im) {
print "u guess too low\n"
} else {
print "u got it right\n"
}
$old=0;
$new=$old || "default"; #if old is fault, new equal default
print "$new\n"
#############Loop While #################
$counter=0;
while ($counter < 10> {
print "still countering...\n"
$counter++
}
#############Loop for #################
for {$a=0; $a<10; $a=$a+2) {
print "a is now $a\n"
}
############Easy way################
if (test_expression) {
expression;
}
same as:
expression if (test_expression)
############last : jump out the loop###########
for ($i=0; $i<100; $i++) {
for ($j=0; $j<100; $j++) {
if ($i*$j ==1400) {
print "the produce is 1400\n";
last
} } }
###########My block############
MYBLOCK: while (1) {
last MYBLOCK;
}
###############EXIT PERL###############
while (1) {
exit 0;
}
第4学时 基本构件的堆栈:列表与数组 39
4.1 将数据放入列表和数组 39
若要创建一个新数组,并用一个项目列表填入该数组,只要编写下面这个代码即可:
@boy=qw(Greg Peter Bobby);
使用该运算符后,你就不必键入6个引号和2个逗号
数组变量可以与标量变量使用相同的名字,例如,$ n a m e s与@ n a m e s可以指不同的东西,$ n a m e s指一个标量变量,而@ n a m e s则指一个数组
4.2 从数组中取出元素 41
@trees=qw(oad cedar maple);
print $trees[2];
print "@trees"; #print whole array
4.2.1 寻找结尾 42=> $#array is the last member of the array.
4.2.2 关于上下文的详细说明 43
$a=$b; # Scalar on the left: this is scalar context.
@foo=@bar; # Array on the left: this is list context
($a)=@foo; # List on the left: this is also list context.
$b=@bar; # Scalar on the left: this is scalar context. 数组bar的最后element的索引号。
例子2;
$a=@foo;
$b=$#foo;
print "$a\n";
print "$b\n";
在该代码的结尾, $ a包含数字4,$ b包含数字3。为什么会出现这个差别呢?因为@ f o o是
在标量上下文中运行的,它返回$ a的元素的数量。$ b设置为最后一个元素的索引号,而索引
是从0开始计数的。
4.2.3 回顾以前的几个功能 44
4.3 对数组进行操作 45
4.3.1 遍历数组 46
4.3.2 在数组与标量之间进行转换 46
4.3.3 给数组重新排序 48
#!/usr/bin/perl -w
@foo=qw(water pepsi coke lemonade );
$a=@foo; #number of the list, 4
$b=$#foo; #number of last items in the list
print "$a\n";
print "$b\n";
if (@foo) { #array has 4 elements, true
print "the array has elements\n";
}
#############
@pets=('cat', 'dog', 'fish',);#understood
$last_pets=('cat', 'dog', 'fish',); #when left side is scalar, that means the last items in the list
#########
foreach $cone (@flavor) {
print "i's like a cone of $cone\n";
}
第5学时 进行文件操作 53
5.1 打开文件 53
P e r l中的文件句柄实际上是另一种类型的变量;,不同之处是句柄的名字前面没有类型标识符( $、@)。由
于这个原因,句柄名字最好使用大写字母
open (FILEHANDLER, pathname)
ex: open(MYTEXT, "novel.txt") ||die
close (MYTEXT);
5.1.1 路径名 54
5.1.2 出色的防错措施 55
5.1.3 以适当的方式运行die函数 56
5.2 读取文件 56
5.3 写入文件 58
5.4 自由文件、测试文件和二进制数据 60
5.4.1 自由文件句柄 60
5.4.2 二进制文件 60
5.4.3 文件测试运算符 61
open (MYFILE, "novel.txt") || die "Can't open: $!";
$line=;
######samele : FILE in WHILE loop#######
while () {
print $_;
}
sample 2:
open (MYFILE, "novel.txt") || die "Can't open: $!";
@contents=;
close (MYFILE);
####write to or append to#####
open (NEWFILE, ">output.txt");
open (NEWFILE, ">>output.txt");
####STDIN, STDOUT and STDERR####
$guess=;
...
第6学时 模式匹配 64
6.1 简单的模式 64
$pat=
$_="The phrase that pays";
if (/$pat/) { #Look for the user's pattern
print "\"$_\" contains the pattern $pat\n";
}
sample from BlackBook
[root@localhost ~]# perl -
while(<>) {
if (m/exit/i) {exit;} #/i, means don't care small or capital.
}
__END__
abc
exi
exit
=====
sample 2:
while ($line = <>) {
if ($line =~ m/exit/i) {exit;}
}
__END__
abc
exit
6.2 元字符 66
6.2.1 一个简单的元字符 66
6.2.2 非输出字符 66
6.2.3 通配符 66
6.2.4 字符类 68
6.2.5 分组和选择 69
6.2.6 位置通配符 69
6.3 替换 70
s/searchpattern/replacement/;
6.4 练习:清除输入数据 70
6.5 关于模式匹配的其他问题 71
6.5.1 对其他变量进行操作 71
6.5.2 修饰符与多次匹配 72
6.5.3 反向引用 73
6.5.4 一个新函数:grep 73
1, easy mode:
m/Simon/: find Simon in $_. 标量变量$
m/I won \$10 at the fair/; #the $ is treated as a literal dollar-sign.
if (m:/usr/local/bin/hangman:) { printn "found the hangmann game"}
if (/$pat/) #
如果将模式括起来的字符(称为界限符)是斜杠,那么编写模式匹配代码时也可以不带m。
因此,也可以将m / C h e e t o s写成/ C h e e t o s /
/ x { 5,10}/ x至少出现5次,但是不超过1 0次。
2, 分组和选择
if (/dogs|cats/) {
print "\$_ contains a ets"
}
第7学时 哈希结构 77
数组与哈希的差别是:哈希是按照名字来访问它们的标量的,而不是像数组那样使用数字标号进行访问
7.1 将数据填入哈希结构 77
$food{'apple'} = 'fruit';
$food{'pear'} = 'fruit';
$food{'carrot'} = 'vegetable';
7.2 从哈希结构中取出数据 78
%Movies = ( 'The Shining' => 'Kubrick', 'Ten Commandments' => 'DeMille', Goonies =>
'Spielberg');
print $Movies{'The Shining'};
7.3 列表与哈希结构 80
7.4 关于哈希结构的补充说明 81
7.4.1 测试哈希结构中的关键字 81
7.4.2 从哈希结构中删除关键字 81
7.5 用哈希结构进行的有用操作 81
7.5.1 确定频率分布 82
7.5.2 在数组中寻找惟一的元素 82
7.5.3 寻找两个数组之间的交汇部分
和不同部分 83
7.5.4 对哈希结构进行排序 84
$book {Dune}='Frank";
%food=(apple => 'fruint,, pear => 'fruit,);
=> 逗号箭头运算符之所以叫做这个名字,原因是它的作用类似于逗号(当
它用于分隔列表的项目时),并且它看上去像个箭头。
第8学时 函数 89
8.1 创建和调用子例程 89
8.1.1 返回子例程的值 90
8.1.2 参数 91
在子例程中,被传递的参数可以通过P e r l的特殊变量@ 来访问。下面这个代码段显示了
为函数传递参数(3个字符串直接量)和输出参数的情况:
sub printargs {
print join(',', @_); #将传递进来的参数放入数组@_中
}
printargs('market', 'home', 'roast beef');
访问数组元素: print $_[2]
若要像下面这个例子中那样,访问传递过来的各个参数,可以使用数组@ 上的下标,就
像你对任何其他数组操作时那样。请记住, $ [ 0 ](@ 的一个下标)与标量变量$ 毫不相干:
8.1.3 传递数组和哈希结构 91
sub Subroutine_name {
statementn1;
:
statementnx;
}
sample:
sub yesno {
print "r u sure";
$annswer=
}
yesno ();
============
sub two_by_four {
2*4;
}
print 8*two_by_four ();
===========
要传递子例程的参数
被传递的参数可以通过P e r l的特殊变量@ 来访问。
请记住, $ [ 0 ](@ 的一个下标)与标量变量$ 毫不相干:
sub print_3_argumennt {
print $_[2];
}
sub display_score {
($hits, $bat)=@_;
}
display_score (50, 210);
===
sub moonweight {
($weight)= @_;
return ($weight/6);
}
print moonweight (150);
。按照默认设置,
在你的程序的主体中和子例程中, P e r l的变量是可视的,这些类型的变量称为全局变量。
你要做的工作是使变量成为函数的专用变量。为此,必须使用m y操作符:
8.2 作用域 92
8.3 练习:统计数字 94
8.4 函数的脚注 96
8.4.1 声明local变量 96
8.4.2 使Perl变得更加严格 97
8.4.3 递归函数 98
8.5 课时小结 99
8.6 课外作业 99
8.6.1 专家答疑 99
8.6.2 思考题 99
8.6.3 解答 100
8.6.4 实习 100
第二部分 高级特性
第9学时 其他函数和运算符 103
9.1 搜索标量 103
9.1.1 用index进行搜索 103可以给i n d e x函数规定一个字符串中开始进行搜索的起始位置,如下面的例子
显示的那样。若要从左边开始搜索,使用的起始位置是0:
$reindeer="dasher dancer prancer vixen";
index($reindeer, "da"); # Returns 0, 默认从0开始
index($reindeer, "da", 1); # Returns 7, 从1开始
9.1.2 用rindex向后搜索 104
9.1.3 用substr分割标量 104
s u b s t r函数取出s t r i n g,从位置o ff s e t开始运行,并返回从o ff s e t到结尾的字符串的剩余部分
#Character positions in $a
# 0 10 20 30
$a="I do not like green eggs and ham.";
print substr($a, 25); # prints "and ham."
print substr($a, 14, 5); # prints "green"
9.2 转换而不是替换 105
9.3 功能更强的print函数 106
9.4 练习:格式化报表 107
9.5 堆栈形式的列表 109
9.6 课时小结 110
9.7 课外作业 111
9.7.1 专家答疑 111
9.7.2 思考题 111
9.7.3 解答 112
9.7.4 实习 112
第10学时 文件与目录 113
10.1 获得目录列表 113
10.2 练习:UNIX的grep 116
1: #!/usr/bin/perl -w #-w, warning
2:
3: use strict; #strict mode, 要先声明标量
4:
5: print "Directory to search: ";
6: my $dir=
7: print "Pattern to look for: ";
8: my $pat=
9:
10: my($file);
11:
12: opendir(DH, $dir) || die "Cannot open $dir: $!";
13: while ($file=readdir DH) { #readdir, 函数名
14: next if (-d "$dir/$file"); #确实是目录本身( - d)的任何目录条目均被拒绝。请注意,被核实的路 径名 是$ d i r / $ f i l e。核实该路径是必要的,因为当前目录中不一定存在$ f i l e,它存在于$ d i r中。因此该文件的全路径名是$ d i r / $ f i l e
15: if (! open(F, "$dir/$file") ) { #如果无法打开文件
16: warn "Cannot search $file: $!";
17: next;
18: }
19: while(
20: if (/$pat/) {
21: print "$file: $_";
22: }
23: }
24: close(F);
25: }
26: closedir(DH);
10.3 目录 117
10.3.1 浏览目录 117
10.3.2 创建和删除目录 118
10.3.3 删除文件 119
10.3.4 给文件改名 119
10.4 UNIX系统 120
10.5 你应该了解的关于文件的所有信息 121
10.6 练习:对整个文件改名 122
1: #!/usr/bin/perl -w
2:
3: use strict;
4:
5: my($dir, $oldpat, $newpat);
6: print "Directory: ";
7: chomp($dir=
8: print "Old pattern: ";
9: chomp($oldpat=
10: print "New pattern: ";
11: chomp($newpat=
12:
13: opendir(DH, $dir) || die "Cannot open $dir: $!";
14: my @files=readdir DH; #第1 3 ~ 1 5行:$ d i r指明的目录中的条目被读入@ f i l e s。
15: close(DH);
16: my $oldname;
17: foreach(@files) {
18: $oldname=$_;
19: s/$oldpat/$newpat/;
#第1 7 ~ 1 9行:来自@ f i l e s的每个文件均被赋给$ _,并且该名字被保存在$ o l d n a m e中。然
后,$_中的原始文件名被改为1 9行上的新名字。
20: next if (-e "$dir/$_");
21: if (! rename "$dir/$oldname", "$dir/$_") {
22: warn "Could not rename $oldname to $_: $!"
23: } else {
24: print "File $oldname renamed to $_\n";
25: }
26: }
第11学时 系统之间的互操作性 126
11.1 system()函数 126
11.2 捕获输出 128
11.3 管道 129
11.4 可移植性入门 131
system command
system ("ls -l");
这个方法很麻烦,不是一个十分聪明的办法。P e r l有另外一个方法处理这个问题,即反引
号。用反引号( ` `)括起来的任何命令均由P e r l作为外部命令来运行,就像通过s y s t e m运行的
一样,其输出被捕获,并且作为反引号的返回值返回。
$directory=`dir`;
@dir=`dir`;
foreach (@dir) {
#process each line
}
======
管道
dir > oldfile
sort oldfile > newfile
more newfile
====> Better way:
dir | sort | more
第12学时 使用Perl的命令行工具 137
12.1 什么是调试程序 137
12.1.1 启动调试程序 137
12.1.2 调试程序的基本命令 138
12.1.3 断点 139
12.1.4 其他调试程序命令 140
12.2 练习:查找错误 141
12.3 其他命令行特性 142
12.3.1 单命令行程序 142
12.3.2 其他开关 143
12.3.3 空的尖括号与更多的单命令
行程序 144
12.4 课时小结 145
12.5 课外作业 145
12.5.1 专家答疑 145
12.5.2 思考题 146
12.5.3 解答 146
第13学时 引用与结构 147
13.1 引用的基本概念 147
13.1.1 对数组的引用 149
13.1.2 对哈希结构的引用 149
13.1.3 作为参数的引用 150
13.1.4 创建各种结构 151
13.2 结构的配置方法 152
13.2.1 一个例子:列表中的列表 152
13.2.2 其他结构 153
13.2.3 使用引用来调试程序 154
13.3 练习:另一个游戏——迷宫 155
13.4 课时小结 157
13.5 课外作业 157
13.5.1 专家答疑 157
13.5.2 思考题 158
13.5.3 解答 158
13.5.4 实习 158
第14学时 使用模块 159
14.1 模块的概述 159
14.1.1 读取关于模块的文档 160
#perldoc Cwd
#perldoc Socket
在这个例子中,C w d模块实际上允许你使用3个新函数,即c w d、g e t c w d和f a s t g e t c w d。如
果你想使用这些函数,请阅读关于C w d模块的文档。
14.1.2 什么地方可能出错 161
14.2 已安装模块简介 162
14.2.1 文件和目录简介 162
14.2.2 拷贝文件 164
14.2.3 用于通信的Perl模块 164
14.2.4 使用English模块 165
14.2.5 diagnostics模块 165
14.3 标准模块的完整列表 166
14.4 课时小结 167
14.5 课外作业 167
14.5.1 专家答疑 167
14.5.2 思考题 168
14.5.3 解答 168
14.5.4 实习 168
第15学时 了解程序的运行性能 169
15.1 DBM文件 169
15.1.1 需要了解的重点 170
15.1.2 遍历与DBM文件相连接的哈
希结构 170
15.2 练习:一种自由格式备忘记事板 171
15.3 将文本文件用作数据库 173
15.4 随机访问文件 175
15.4.1 打开文件进行读写操作 175
15.4.2 在读写文件中移动 176
15.5 锁定文件 176
15.5.1 锁定UNIX和NT下的文件 178
15.5.2 在加锁情况下进行读写操作 179
15.5.3 Windows 95和Windows 98下的
加锁问题 180 15.5.4 在其他地方使用文件锁的问题 181
15.6 课时小结 181
15.7 课外作业 181
15.7.1 专家答疑 181
15.7.2 思考题 182
15.7.3 解答 182
15.7.4 实习 182
第16学时 Perl语言开发界 183
16.1 Perl究竟是一种什么语言 183
16.1.1 Perl的简单发展历史 183
16.1.2 开放源 184
16.1.3 Perl的开发 185
16.2 Perl综合存档文件网 185
16.2.1 什么是CPAN 186
16.2.2 为什么人们愿意提供自己的开
发成果 186
16.3 下一步你要做的工作 187
16.3.1 要做的第一步工作 187
16.3.2 最有用的工具 187
16.3.3 查找程序中的错误 188
16.3.4 首先要靠自己来解决问题 188
16.3.5 从别人的程序错误中吸取教训 189
16.3.6 请求他人的帮助 190
16.4 其他资源 191
16.5 课时小结 192
16.6 课外作业 192
16.6.1 专家答疑 192
16.6.2 思考题 192
16.6.3 解答 192
第三部分 将Perl用于CGI
第17学时 CGI概述 195
17.1 浏览Web 195
17.1.1 检索一个静态Web页 196
17.1.2 动态Web页—使用CGI 197
17.2 不要跳过这一节内容 198
17.3 编写你的第一个CGI程序 199
17.3.1 在服务器上安装CGI程序 200
17.3.2 运行你的CGI程序 201
17.4 CGI程序无法运行时怎么办 201
17.4.1 这是你的CGI程序吗 201
17.4.2 服务器存在的问题 202
17.4.3 排除服务器内部错误或500错误 203
17.5 课时小结 204
17.6 课外作业 204
17.6.1 专家答疑 204
17.6.2 思考题 205
17.6.3 解答 205
17.6.4 实习 206
第18学时 基本窗体 207
18.1 窗体是如何运行的 207
18.1.1 HTML窗体元素概述 207
18.1.2 单击submit时出现的情况 208
18.2 将信息传递给你的CGI程序 209
18.3 Web安全性 211
18.3.1 建立传输明码文本的连接 211
18.3.2 注意不安全数据 212
18.3.3 从事无法执行的操作 213
18.3.4 拒绝服务 213
18.4 宾客留言簿 214
18.5 课时小结 215
18.6 课外作业 215
18.6.1 专家答疑 215
18.6.2 思考题 216
18.6.3 解答 216
18.6.4 实习 216
第19学时 复杂窗体 217
19.1 复杂的多页窗体 217
19.2 隐藏域 217
19.3 多页调查窗体 219
19.4 课时小结 224
19.5 课外作业 224
19.5.1 专家答疑 224
19.5.2 思考题 225
19.5.3 解答 225
19.5.4 实习 225
第20学时 对HTTP和CGI进行操作 226
20.1 HTTP通信概述 226
20.1.1 举例:人工检索Web页 227
20.1.2 举例:返回非文本信息 228
20.2 如何调用CGI程序的详细说明 230
20.2.1 将参数传递给CGI程序 230
20.2.2 特殊参数 231
20.3 服务器端的包含程序 232
20.4 部分环境函数简介 234
20.5 重定向 235
20.6 课时小结 237
20.7 课外作业 237
20.7.1 专家答疑 237
20.7.2 思考题 237
20.7.3 解答 238
20.7.4 实习 238
第21学时 cookie 239
21.1 什么是cookie 239
21.1.1 如何创建cookie 240
21.1.2 举例:使用cookie 241
21.1.3 另一个例子:cookie查看器 242
21.2 高级cookie特性 243
21.2.1 设置cookie终止运行的时间 243
21.2.2 cookie的局限性 244
21.2.3 将cookie发送到其他地方 244
21.2.4 限制cookie返回到的位置 246
21.2.5 带有安全性的cookie 247
21.3 cookie存在的问题 247
21.3.1 cookie的生存期很短 247
21.3.2 并非所有浏览器都支持cookie 247
21.3.3 有些人不喜欢cookie 247
21.4 课时小结 248
21.5 课外作业 248
21.5.1 专家答疑 248
21.5.2 思考题 249
21.5.3 解答 250
21.5.4 实习 250
第22学时 使用CGI程序发送电子邮件 251
22.1 Internet邮件入门 251
22.1.1 发送电子邮件 252
22.1.2 发送邮件时首先应该注意的问题 252
22.2 邮件发送函数 253
22.2.1 用于UNIX系统的邮件函数 254
22.2.2 用于非UNIX系统的邮件函数 255
22.3 从Web页发送邮件 257
22.4 课时小结 259
22.5 课外作业 259
22.5.1 专家答疑 259
22.5.2 思考题 260
22.5.3 解答 260
22.5.4 实习 260
第23学时 服务器推送和访问次数计数器 261
23.1 什么是服务器推送 261
23.1.1 激活服务器推送特性 262
23.1.2 一个小例子:更新Web页上
的时钟 262
23.1.3 另一个例子:动画 263
23.1.4 客户机拖拉技术 264
23.2 访问次数计数器 264
23.2.1 编写一个访问次数计数器程序 266
23.2.2 图形访问次数计数器 267
23.3 课时小结 268
23.4 课外作业 269
23.4 1 专家答疑 269
23.4.2 思考题 269
23.4.3 解答 269
23.4.4 实习 270
第24学时 建立交互式Web站点 271
24.1 借用另一个站点的内容 271
24.1.1 注意内容的版权问题 271
24.1.2 举例:检索标题 272
24.2 调查窗体 275
24.2.1 调查窗体程序的第一部分:
提出问题 276
24.2.2 调查窗体程序的第二部分:
计算调查结果 277
24.3 课时小结 280
24.4 课外作业 280
24.4.1 专家答疑 280
24.4.2 思考题 281
24.4.3 解答 281
24.4.4 实习 281
第四部分 附录
附录 安装模块 285
a, perl -MCPAN -e shell (error: can't locate CPAN.pm)
#yum install perl-CPAN
Q&A
1, 如何检查语法?
a, perl -
print "hello\n";
__END__
==>hello
b, perl -e 'print "hello "; "there\n"'
==>hello there
c, perl -c firemissile.pl
==>只检查,不执行
2, 表和字符串
由表到串join =》 print join (":", "12","00");
12:00
由串到表split=>print ((split " ", "now is the time")[3]);
time
Monday, February 23, 2009
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment