字符型变量和数值型变量
数值型变量可以直接用 3*8 ,7+9的方式来书写
字符型变量的连接可以使用点(.)操作符,如 "abcd"."xxxx"等同于"abcdxxxx"
字符型变量可以内嵌到其他的字符型变量中,但要求的字符串必须用双引号来括起的形式,单引号的不能够内嵌
如 :
$ZYQ="ZhouYueQiu"
$NAME="my name is $ZYQ"
注意:如果$ZYQ没有赋值,那么将用空来代替
if控制结构
一旦能比较两个值时,就希望能根据这些比较结果作判断。和别的语言类似,Perl中也提供了 if控制结构:
如果需要另一种选择,可以使用关键字else:
Boolean 值
在if控制结构的条件判断部分可以使用任意的标量值。这在某些时候将很方便,如:
if ( $is_bigger )
{
do something
}
那么,Perl 是怎么判断其值得true 或 false呢?Perl不同于其它的一些语言, 它没有Boolean 类型。它利用如下几条规则
●数字0 是false;其余为真
●如果值为字符串,则空串('')为false;其余为真
●如果值的类型既不是数字又不是字符串,则将其转换为数字或字符串后再利用上述规则
用户输入
现在,可能想你的 Perl 程序怎样才能从键盘上得到输入呢?有一种简单方法:使用行输入操作符(line-input operator),
<STDIN>
◆是行输入运算符对文件句柄STDIN的操作。但直到第五章才介绍文件句柄。
<STDIN>作为标量值来使用的,Perl 每次从标准输入中读入文本的下一行,将其传给<STDIN>。标准输入可以有很多种;
默认的是键盘。如果还没有值输入<STDIN>,Perl 会停下来等你输入一些字符,由换行符结束(return)。
◆坦白讲,是你的系统等待输入,Perl等待你的系统。具体的细节与机器和配置有关。由于是系统而非 Perl 控制你的输入,因此要更正错误的输入通常可以在按下回车前使用退格键(backspace) 。如果想更多的控制输入,可以使用 Term::ReadLine 这个模块
<STDIN>中的字符串通常由一个换行符作为结尾。因此,可以如下操作:
◆例外的情况是,标准输入流在行中间就结束了。当然,普通的文本文件通常不是这样。
例1-1
chomp函数
chomp函数,可以去掉变量中最后的换行符
如下例:
$text="a line of text\n" ; #也可以由<STDIN>输入
chomp($text); #去掉换行符(\n)。
这是将字符串末尾换行符去掉的最好方法。
基于 Perl 中的一条基本原则:在需要使用变量的地方,可以使用赋值表达式来代替。
我们有更简单的使用 chomp的方法。Perl 首先做赋值运算,再使用这个变量。因此
使用chomp的最常用方法是:
chomp ($text = <STDIN>); #读入,但不含换行符
$text = <STDIN>;
chomp ($text); #同上,但用两步完成
chomp是一个函数。作为一个函数,它有一个返回值,为移除的字符的个数。这个数字基本上没什么用:
$food=<STDIN>;
$betty=chomp $food; #得到值1
如上,在使用 chomp 时,可以使用或不使用括号() 。这又是 Perl 中的一条通用规则:除非移除它们时含义会变,否则括号是可以省略的。
while控制结构
和许多的程序语言一样,Perl 也提供了循环结构。while语句可以循环执行其内部的一块代码直到其条件非真:
while ( $count < 10 ) {
$count + = 2 ;
print "count is now $count\n" ; #打印出 2 4 6 8 10
}
条件中真假值的判断和if结构中是一样的。和if控制结构相同,花括号是必须的。判断条件在迭代前执行,如果条件为假,
则一次也不执行。
undef值
如果没有定义就是用这个变量的话,这个变量中的值就称之为undef。如果当成数字的话其值为0,当成字符串使用的话它表示空字符串。但它及不是数字也不是字符串,它完全是另一种类型的标量值。
既然undef作为数字时会被视为0,我们可以很容易的构造一个数值累加器,如下例子:
例1-2
输出结果
Use of uninitialized value in numeric lt (<) at undef.pl line 2.
1 2 3 4 5 6 7 8 9 10
这里我使用了-w参数因此输出了一行警告信息
同样undef也可以作为一个字符串的累加器,如下:
$string.="more text\n";
defined函数
"行输入"操作符 <STDIN> 在读到文件末尾时会返回undef。那么如何判断一个变量是undef还是空字符串呢?使用defined函数就可以搞定这个疑虑,如果是undef返回假,否则返回真。如下例子:
例1-3
如果想尝试undef值,可以直接使用undef操作符,或者不进行任何的定义即可。