Perl标量的学习
任何语言都有变量,变量在Perl中简单的分为标量和组数变量.
标量:表示单个的量,即英文中所说的单数.
例如: $name = "Hello"';
$age=18;
$price =123.88;
$price=343_333_333.898;
都是一个标量,Perl对数字标量在计算机中采用浮点数形式存贮。通常浮点数的精度是不够准确的。这点需要特别注意。
下面是一个例子.
#!/usr/local/bin/perl
$value = 9.01e+21 + 0.01 - 9.01e+21;
print ("first value is ", $value, "\n");
$value = 9.01e+21 - 9.01e+21 + 0.01;
print ("second value is ", $value, "\n");
---------------------------------------------------------
$ program3_3
first value is 0
second value is 0.01
可以看到,不同的运算顺序可能导致的结果不一样!在Perl中十进制数字用0x开头表示.0开头表示一个8进制数。Perl对数学运算的操作符有:
算术操作符 :+(加)、-(减)、*(乘)、/(除)、**(乘幂)、%(取余)、-(单目负)
(1)前面几个不用说了吧.说一下乘幂这里需要注册,基数不能为负数.
(2)单目负又是什么意思?他实际上就是一个负号。就是数学中的负数表示符。
算术比较符:
==(相等),<(小于),>(大于),!=(不等于),还有一个<=>(表示可以取三个数-1,0,1);
标量除了是一个数字,字符串之外,还可以是其它复杂类型的引用.这点请暂时记住.我将在后面详细说明这个问题.
现在来说下字符串,Perl采用unicode表示一个数值,这就意味着和java一样,可以表示世界上任何一个国家的语言文字,对于字符串的运算符有
.(相连)
比较符:lt(小于),gt(大于),ne(不等于),eq(等于),le(小于等于),ge(大于等于),需要说明的的是。字符串的运算是按Ascii来进行运算的。就是说a(Ascii值为97),A(ASCII值为65),结果就是: a gt A
另一种变量叫做数组变量.数组大家都知道,表示一组数据的集合.数据型可以分为有序的数组和无序的列表.他通常相当于英语中的复数.还有一种叫散列.他是一种特殊的数组.用Key+value的形式来表示.相当于Java中的Map.是按键值对来存放的.
我们用$表示一个标量,用@表示一个列表和数组.用%表示一个散列.
举例说明:
@lines = ("a","b","c");
这样就定义了一个数组,他里面有三个元素 a b c ,定义数组时用()号把中间元素包扩起来.里面用,号分开,
也可以写成这样
@lines=qw(a b c d);
注意用qw定义时,里面不能写,号.这点请记住它!,而且qw里面只能是字符的原型,比如说,你给成这样
$a ="a";
@lines=qw($a b c d);将$a这个变量传进来,你的目的是这样,但是我告诉你这达不到你希望的效果.
他会原封不动的给你显示出来.这也正好说明了这里不能给a b c d 加个双引号.
%person 表示一个散列.
要对这个散列进行给值.使用
$person{"name"}="Hello";
也可以使用%person= ("a","b","c","d")这样的形式,我们说过,散列表示一个key/value的集合,所以perl会将这样的列表形式的数组按照key/value进行转换. 每两个一组,前面是键,后面是值.
当然这样的形式并不好看.
我们还可以写成
%person= ("a"=>"b","c"=>"d").
你可以直接把一个数组表示的变量给一个散列.用(),你也可以把一个散列的具体值指向另一个散列.
%person{"a"}={
"name"=>"zhangsan",
"age"=>"23",
}
通过 $person{"a"}{"name"}访问到zhangsan;
不仅如此,你还可以将一个散列的具体值指向一个数量.
%person{"a"}=["a1","a2","a3"];
通过$person{"a"}[0]访问到a1;
有了这样的机制我们很容易建立出类似多维数组一样的东西!好了,是不是很简单呢?