|
或分 FAQ 来分类手册,还能在手册中搜索内容,如 man perlfunc split --- 搜索 split 函数的使用 man perlvar ARGV --- 内置变量 ARGV 的帮助信息 |
2. 变量的语法
象英语一样,Perl 变量类型之间区别主要是单数和复数,字符串和数字是单个数据,而一组数字和字符串是复数。我们叫把单数变量称为标量,而把复数变量称为数组。
通常我们用 $ 开头的名称表示标量,与此对应的数组变量使用 @ 开头。。(可以将 $ 理解成代表 "s" 或 "scalar"(标量),而 @ 表示 "a" 或 "array" (数组)来帮助你记忆。)
Perl 还有象“散列”,“句柄”,“类型团”等其他一些变量类型,与标量和数组一样,这些变量类型也是前导趣味字符,下面是你将会碰到的所有趣味字符:
类型 | 字符 | 例子 | 用于哪种名字 |
标量 | $ | $cents | 一个独立的数值(数字或字串) |
数组 | @ | @large | 一列数值,用编号做键字 |
散列 | % | %interest | 一组数值,用字串做键字 |
子过程 | & | &how | 一段可以调用的 Perl 代码 |
类型团 | * | *struck | 所有叫 struck 的东西 |
$answer = 42; # 一个整数
$pi = 3.14159265 # 一个"实"数
$pet = "Camel"; # 字串
$sign = "I ove my $pet"; # 带代换的字串
$cose = 'It cose $100'; # 不带代换的字串
$thence = $whence; # 另一个变量的数值
$salsa = $moles * $avocados; # 一个胃化学表达式
$exit = system("vi $file"); # 一条命令的数字状态
$cwd = `pwd`; # 从一个命令输出的字串
如果你使用了一个尚未赋值的变量,这个未初始化的变量会在需要的时候自动存在.遵循最小意外的原则,该变量按照常规初始化为空值,"" 或 0。
不同的操作符会给参数提供一个数字环境,字符串环境或布尔环境.例如:
$camels = '123';
print $camels +1, "/n";
输出为 124。
"/n" 表示的新行同样也在字符串环境中,但是由于它本来就是一个字符串,因此就没有必要做转换了.
'/n',这就表示这是由反斜扛和 n 两个字符组成的字符串,而不表示一个新行.
从某种意义上来说,使用单引号和双引号也是另外一种提供不同环境方法.双引号环境在 Perl 中称为代换环境.
1.2.3 复数变量
Perl 有两种类型的多值变量:数组和散列,它们提供一个列表环境而不是标量环境.
数组.一个数组是多个标量的有序列表,可以用标量在列表中的位置来访问要对一个数组赋值,你只需简单的将这些值排列在一起,并用大括弧括起来.
@home = ("couch", "chair", "table", "stove");
从数组给标量赋值:(有点类似 PL/SQL 中的游标赋值给多个变量)
($potato, $lift, $tennis, $pipe) = @home;
他们被称为列表赋值,他们逻辑上平行发生,因此你可以象下面一样交换两个变量:
($alpha, $omega) = ( $omega, $alpha);
数组变量的引用,赋值,如上的数组 @home,引用第一个元素就是 $home[0],注意是从 0 开始,因为我们处理的这个数组元素是标量,因此在他前面总是前缀 $.
数组是有序的,你可以在它上面做很多有用操作.如作为堆栈 push 和 pop,Perl 将你数组的结尾当成堆栈的顶端。
散列是一组无序标量,通过和每个标量关联的字符串进行访问.散列经常被称为关联数组.
散列使用 % 这个趣味字符来标志散列名字(如果你仔细观察 %,你会发现斜扛两边的键字和数值.这样理解可能会帮助记忆.)
散列的声明:
%longday = ("Sun", "Sunday", "Mon", "Monday", "Tue", "Tuesday");
或(无疑第二种方式易读好理解)
%longday = ("Sun" => "Sunday","Mon" => "Monday","Tue" => "Tuesday");
可以通过 {} 来获取单个的散列元素.比如,你应该使用 $longday{"Mon"}.注意因为你在处理标量,因此在 longday 前面使用 $,而不是 %,% 代表整个散列.
我们注意到变量中的 $、@ 或 % 不像其他语言的变量名中相对应的符号(其他语言的变量命名中一般只允许 $),它们不是作为变量名的一部分,而是承载着变量类型的说明。所以当你看到访问 @home、%longday 变量中的单个元素用的是 $home[0]、$longday{"Mon"} 不要感到惊讶,而是要去习惯这种用法。
强调一下:数组和列表声明时都用括号"()",访问数组和列表的元素时分别用中括号"[]" 和 大括号 "{}"。