Learning Perl 第二章 标量数据 标量是Perl里最简单的一种数据类型,要么是数字,要么是字符组成的序列。对于Perl来说,这二者能够在内部转换。 能够用操做符对标量进行操做,产生的结果也是标量。 在Perl内部,老是按照双精度浮点数的要求来保存数字并进行运算的。Perl并不存在整型变量。 浮点数直接量 直接量值某个数字在Perl源代码中的写法。 小数点和前置的正负号都是可选的,数字前面加上用"e"表示的指数表示法。 非十进制的整数直接量 Perl容许十进制之外的其余进制来表示数字。八进制直接量以O开头,十六进制以0x开头,二进制变量以0b开头。 非十进制直接量多了会影响阅读。Perl容许在这些直接量中使用下划线。 字符串 字符串能够是任意字符组成,长度没有限制,由于字符串能够包含任意数据,因此能够用它来建立,扫描或操控二进制数据。 Perl彻底支持unicode,若是在源代码中使用Unicode书写直接量,要手动加上utf-8编译指令: use utf-8; 单引号的字符串直接量 要表示反斜线自己,须要在反斜线前面加上一个反斜线字符表示转义;要表示单引号自己时,也须要在单引号前面加上反斜线字符表示转义。 双引号内的字符串直接量 能够转义许多控制字符,或者用八进制或十六进制写法表示任何字符。 双引括号的另外一特性称为变量内插 字符串操做符 字符串能够用.号链接起来,链接运算符必须显式使用。 字符串重复操做符,小写字母x。并不知足交换律。 重复次数在使用前先取整,小于1时会生成空字符串。 数字与字符串间的自动转换 Perl会根据须要,自动在数字和字符串间进行类型转换。 Perl内置警告信息 $perl -w program #!/usr/bin/perl -w use diagnostics; 能够显示更详细的警告信息。可是加载警告信息到内存会比较慢。 能够perl -wdiagnostics ./program应用。 标量变量 标量变量仅仅存储一个值的变量。标量变量的名称以美圆符号开头,称为魔符(sigil),标识符区分大小写。 $的意思就是取标量。 标量的赋值 双目赋值操做符 print输出结果 字符串中的标量变量内插 借助代码建立字符 chr()函数转换代码点为字符;ord()转换字符为代码点。 比较操做符 Perl比较操做符:<,<=,==,>=,!=。这些操做符返回值为true or flase。 能够用eq, ne, lt, gt, le, ge if控制结构 if () {...;} if () {...;} else {...;} 获取用户输入 行输入操做符<STDIN>,放在程序中但愿返回标量值的位置,Perl就会从标准输入读取一行文本。 chomp操做符 chomp()操做符做用于单个变量,去掉字符串末尾的换行符。 chomp($text = <STDIN>); chomp()函数实际的返回值是移除的字符数。 while控制结构 $count = 0; while ($count < 10) { $count += 2; print "count is now $count.\n" } count is now 2. count is now 4. count is now 6. count is now 8. count is now 10. undef值 undef既不是数字也不是字符串,彻底是另一种类型的标量值。 $n = 1; while ($n <= 5) { $count += $n; $n++; } print "the total is $count.\n"; the total is 15. 程序开始时,$count的初始值的undef,可是并不影响程序的运行。 复制某个undef变量到另外一个变量没有问题,可是print输出会引起警告信息。 defined函数 判断某个字符串是undef而不是空字符串,可使用defined函数,若是undef,则函数返回假,不然返回真。 课后习题 1. 写一个程序,计算半径为12.5时,圆的周长为多少。 2. 修改上题程序,让用户键入半径的长度。 3. 修改上题程序,用户输入半径小于0时,输出0,而不是负数。 4. 写一个程序,提示用户键入两个数字,而后输出二者的乘积。 5. 写一个程序,提示用户输入一个字符串和一个数字,而后以数字为重复次数,连续输出字符串。 答案: 1. $pi = 3.1415926; $cric = 2 * $pi * 12.5; print "The circumference of a circle of radius 12.5 is $cric.\n"; 2. $pi = 3.1415926; print "What is the radius?\n"; chomp($radius = <STDIN>); $cric = 2 * $pi * $radius; print "The circumference of a circle of radius 12.5 is $cric.\n"; 3. $pi = 3.1415926; print "What is the radius?\n"; chomp($radius = <STDIN>); $cric = 2 * $pi * $radius; if ($radius < 0) { $cric = 0; } print "The circumference of a circle of radius 12.5 is $cric.\n"; 4. print "Enter a string: "; $str = <STDIN>; print "Enter a number: "; chomp($num = <STDIN>); $result = $str x $num; print "The result is \n$result.";