原文地址:http://www.linuxforums.org/programming/learn_perl_in_10_easy_lessons__lesson_2.html
什么是变量?
每种计算机语言都会使用变量。如果您是编程新手,请记住代数方程中使用的变量。例如,
a + 5 = 7
在这个方程中,只有一个变量。变量名称是a,值是2。变量通常具有名称和值。在代数学中,变量的值通常是一个数字。在程序中,变量的值可以是数字、字符、字符串或复杂的对象,如数组、哈希表、数据结构等。在本课中,我们将使用变量保存不同类型的对象或值,以便您可以熟悉变量可以表示的各种不同的数据类型。
Perl中的变量
在Perl语言中有三种类型的变量:
- 标量变量
- 数组
- 哈希表
标量变量保存单个值。在Perl语言中,标量变量的名称前总是有一个美元符号。例如:
$a = 2;
$message = "Hello World!";
数组可以保存更多的值。在Perl语言中,数组前总是加@符号,例如:
@colors = ("red", "green", "blue");@primaryNumbers = (1, 2, 3, 5, 7);
哈希表是一种特殊的数组:相关联的数组。它们与数组类似,但对于保存的每个值,还会保存该值相应的名称和标签。它们由成对的元素构成-键和数值。在Perl语言中,哈希表的前缀是百分号。例如:
%phoneNumbers = (Alicia => "090-64-773315", Tom => "085-153-3214", Jimmy => "085-285-4545");
在本课中将重点讨论标量变量和数组。它们易于使用且可以帮助我们编写自己的计算程序。
什么是命令行参数?
通过调用Perl解析器可以调用脚本:
perl myScript.pl
如何隐式调用解析器来调用脚本:
./myScript.pl
不管是隐式调用还是显式调用,都可以为脚本提供参数。这些参数在调用脚本时给出,只需简单地放在脚本名称后面:
./myScript.pl argument1 argument2 argument3
本课中,我们将编写一个计算器。它将计算简单方程(作为命令行参数给出)的结果。例如,如果希望方程计算5+6,那么调用方式如下:
./calculator.pl 5 + 6
在本示例中,给出了三个命令行参数:
- 5
- +
- 6
Perl脚本将检查这些参数,识别出第二个参数,以便知道应该对第一个和第三个参数执行哪种操作,计算并在屏幕上打印结果。
Perl中的命令行参数
当解析器运行Perl脚本时,它将命令行参数保存在称为@ARGV的数组中。Perl语言是区别大小写的,所以此处必须是大写。@ARGV是一个数组,与Perl中的其他数组一样,可以对其执行下面的操作:
- 键入$ARGV[0]可获取数组的第一个元素(请注意,由于这是单个值,所以它由标量表示,前缀是$)。
- 键入$ARGV[1]可获取第二个元素的值,以此类推。
- 键入$#ARGV可获取数组中最后一个元素的索引。
请注意,数组总是从0开始的,而不是从1开始。因此数组的第一个元素是元素0,而不是元素1。例如,元素索引编号12对应数组的第13个元素。这是许多编程语言中的贯例。数组中最后一个元素的索引为元素个数-1。
在本示例中,计算器需要我们给它三个参数:
./calculator.pl 5 + 6
因此,预计@ARGV数组将包含三个参数,$#ARGV等于2,而$ARGV[0]、$ARGV[1]和$ARGV[2]分别等于5、“+”和6。
第二个Perl脚本,计算器!
在Perl中,完成一件事有许多方法。请尝试自己编写计算器,然后与下面的方法进行比较。
#!/usr/bin/perl $nbArguments = $#ARGV + 1; print "number of arguments: $nbArguments\n"; exit(1) unless $nbArguments == 3; $a = $ARGV[0]; $b = $ARGV[2]; $operation = $ARGV[1]; if ($operation eq "+") { $result = $a + $b;} elsif ($operation eq "-") { $result = $a - $b;} elsif ($operation eq "/") { $result = $a / $b;} elsif ($operation eq "x") { $result = $a * $b;} print "$a $operation $b = $result\n";
给脚本写权限:
chmod a+rx calculator.pl
运行:
./calculator.pl 5 + 6./calculator.pl 11 - 2./calculator.pl 4 x 3./calculator.pl 33 / 3
关于(exit(1) unless $nbArguments == 3;):
- exit是一个Perl函数,它使脚本停止执行并返回给shell一个给定的代码。在本示例中,脚本停止并将1返回给shell。1在Unix中是一个贯例,表示发生错误。
- unless是if的反义词。它们都是Perl语句。在本示例中,将调用exit,除非它后面的语句为真“$nbArguments == 3”。
- 在Perl中,还有许多编程语言中,等号用于给变量赋值。例如,$nbArguments = $#ARGV + 1是给$nbArguments赋值。两个等于号"=="是比较操作符,是真还是假取决于两边的变量或值是不是相等。Perl还提供了另外一种操作符“eq”,用于比较字符串。“eq”用于字符串,而“==”用于数字。“=”是赋值操作符而不是比较操作符。
- 简而言之,(exit(1) unless $nbArguments == 3;)的意思是停止执行脚本,除非给出三个命令行参数。
第5、6、7行代码只是简单地将命令行参数赋值给变量。第一个保存在$a中,第三个保存在$b中,第二个保存在
$operation中。
然后,根据$operation对$a和$b进行不同的运算,将结果保存在$result变量中。请注意,示例中使用了"if"和"elsif"语句。"elsif"是"else if"的缩写。
最后一行代码写出了操作的总结,将操作的内容和结果输出到屏幕。
本课中,我们学习了如何使用变量和命令行参数。简单了解了IF语句、比较操作符和一些操作。下一课将学习处理文本文件并进一步了解如何使用操作符和其他语句。