本文作者:Guido Socher 关于作者: Guido 是一个很“老”的Linux 迷。最近他开始出任 LinuxFocus 的编辑。这些日子他还在忙于改造房子并在花园里种些生菜什么的。 目录: |
摘要:
此文是一系列关于 perl 文章中的开篇。读者不需要掌握任何特殊的经验就可以理解此文内容。当然有一些编程语言(如 C、Pascal)方面的知识会使学习 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 的基本编程思想。在后续的文章中将会出现更加复杂的程序。
你也可以用“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