Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
[Photo of the Author]
本文作者:Guido Socher

关于作者:

Guido 是一个很“老”的Linux 迷。最近他开始出任 LinuxFocus 的编辑。这些日子他还在忙于改造房子并在花园里种些生菜什么的。

目录:

Perl 入门 I

[Illustration]

摘要:

此文是一系列关于 perl 文章中的开篇。读者不需要掌握任何特殊的经验就可以理解此文内容。当然有一些编程语言(如 C、Pascal)方面的知识会使学习 Perl 开始的容易一些。



 

什么是 perl?

Perl 是一个脚本语言。最初它由 Larry Wall 开发。其源代码可以直接借助于 perl 程序来“运行”。这个 perl 程序通常被安装在 /usr/bin/perl 下。虽然 perl 在很多方面看起来确实很象经典的 unix 程序 awk 和 sed,但是比起它们来 perl 已经有了很大的进步。现在你甚至可以用 perl 来进行面向对象编程(OOP)和设计用户图形界面(GUI)。借助 perl 的库和 CPAN 上的大量相关文档,用户可以很容易的扩展 perl 的功能。本文旨在为大家介绍一些有关 perl 的基本概念,所以不会涉及到艰深的话题。这些话题将会出现在以后的文章中。

Perl 是一门非常有用的脚本语言。它对那些初具编程经验的人来说是一个很通用的工具。

 

一个简单的程序

请以名字 my1stprg 来保存这个例程序,然后用命令 chmod 755 my1stprg 使它运行。运行之后看看它都走了那些事情。

#!/usr/bin/perl -w
print "What is your name?\n";
$name=<STDIN>;
#remove the new-line character:
chomp($name);
$len=length($name);
print "\nHello $name! Your name is $len characters long\n";

请看上面的源代码。其中的第一行不是注释行。在 unix 脚本中象这种由“#!”开头的行很典型,它将告诉操作系统该对这个文本文件作那些操作。首行之后出现的以 # 开头的行为注释行(例如第四行)。我们还可以看到所有的语句都以分号(;)结束。变量的首字符是美元符号($)。Perl 的变量可以是字符串、整型和浮点型。数据可以根据上下文的环境自动转换成恰当的类型。$-变量 被称为数值变量。在 perl 中还有数组(以 @ 替换 $ 作开头)和复杂的表(以 % 替换 $ 作开头)。这些变量类型将在后续文章中加以讨论。


程序第二行中的 print 函数将向标准输出设备输出一行文本字符串。此函数同 shell 脚本中的 echo 命令类似。如果字符串由双引号扩起来,那么其内部的变量将替换为相应的值;而单引号中的变量则不会被替换。若想在单(双)引号中引用象美元符号、单(双)引号这样的特殊字符就必须使用反斜杠。这里有个例子:

#!/usr/bin/perl -w
$name="joe";
print "1 $name\n";
print '2 ', $name , "\n";
print '3 ', '$name',"\n";
print "4 \"$name\"\n";
print "5 \$name\n";
print "6 \"\$name\"\n";

其运行结果为:

1 joe
2 joe
3 $name
4 "joe"
5 $name
6 "$name"

让我们回头看看开始那个简单程序。命令行 $name=<STDIN>; 提示并等待用户输入直到用户按回车健为止。此行之后变量 $name 将保持用户健入的包括换行符在内的内容。chomp($name);命令从变量 $name 中将删除此换行符。最后 length 函数用来计算 $name 内容的字符数。

不幸的是我们的程序里有个缺陷。当程序提示你 your name 后,如果你按了制表符号或空格符将会发生什么情况呢?这些字符也将被记入在字符长度中。如何才能改正它呢?我们需要一些查找和替换函数来删除名字重的空白字符。Pero 在文本字符串处理上具有很好的性能并提供了完备的操作。[ \t] 是匹配空白字符如空格符、制表符等的一个规则表达式。在 perl 中它被简写成 \s。(更多的关于标准表达式的内容请看此处)。Perl 中的替换命令采用了标准表达式语法:$name=~ s/regexp/replacement/g;。如果在 replacement 字符串处什么也不写,那么当标准表达式符合条件的时候 相应的 regexp 将被删除。现在我们的程序看起来应该是这样:

#!/usr/bin/perl -w
print "What is your name?\n";
$name=<STDIN>;
#remove the new-line character:
chomp($name);
print "\nHello $name!";
#remove spaces from the string:
$name=~s/\s//g;
$len=length($name);
print " Your name is $len characters long\n";

这不是一个实用的程序。因为程序中没有任何控制语句(循环、条件语句)。但是它体现了 perl 的基本编程思想。在后续的文章中将会出现更加复杂的程序。

 

相关文档

此系列文章可以让你循序渐进的学习 perl。当然你也可以现在就去下载这个小参考手册(perlref-5.004.1.tar.gz)。其中的 README 文件说明了如何根据它打印出一个小册子。

你也可以用“man perl”和“man perlfunc”来查看可以使用的函数。不过所有这些只能作为参考资料。你应该跟着本文或者阅读一本类似于《Learning Perl》(O'Reilly著)的书来系统的学习 perl。

中文翻译:郑新广


Webpages maintained by the LinuxFocus Editor team
© Guido Socher
LinuxFocus 1999

1999-09-05, generated by lfparser version 0.7