-- Start
Perl 是一种弱类型的语言,它并不像 Java 等其他语言那样严格区分数字和字符串。在 Perl 中,不管是数字还是字符串都用标量(scalar)来存储,一个标量变量以 $ 开头。那 Perl 是如何来识别一个标量中存储的是数字还是字符串的呢?答案就是操作符。操作符需要什么类型的数据,标量就会被转换成什么类型的数据。如果对两个标量进行数学运算,那么不管这两个标量中存储的是什么,它们都将被转换为数字。如果字符串中包含的不是数字,它将会被转换成 0。
数字标量
#!/usr/bin/perl # 定义整数 $integer = 250; $integer = -250; $integer = 250_250_250; # 下划线的作用是增加可读性 $integer = 250e2; # 250 乘以 10 的 2 次方,e不区分大小写 $integer = 0b11111111; # 二进制以 0b 开头 $integer = 0377; # 八进制以 0 开头 $integer = 0xFF; # 十六进制以 0x 开头,a,b,c,d,e,f 不区分大小写 # 定义浮点数 $float = 250.0; $float = 250.; $float = 0.25; $float = .25; $float = -250.0e2; # -250.0乘以 10 的 2 次方,e不区分大小写
字符串标量
#!/usr/bin/perl # 定义字符串有单引号和双引号两种方式 # 双引号方式 # 双引号内的字符串可以进行变量插值和字符转义 $str = "张三"; $string = "李四"; $text = "我的名字叫$str\n"; #此处的 $str 将被字符串张三替换,这种能力称之为变量插值,\n 为转义字符 $text = "我的名字叫$string\n"; # 此处的变量到底是 $str 还是 $string 呢?默认是最长匹配,也就是$string $text = "我的名字叫${str}ing\n"; # 如果想插入变量 $str的值,可以将变量名用大括号围起来 # 单引号方式 # 单引号内的任何字符都代表它自己,无法进行变量插值和字符转义 $text = '我的名字叫$str\n'; #此处的 $str 无法被替换为张三,\n 也无法代表换行符 # 单引号字符串可以跨行 $text = '我叫尚波, 我今年5岁了。'; # 相当于 "我叫尚波,\n我今年5岁了"
如果字符串本身包含单引号,虽然我们可以用反斜杠转义,但是可读性性差,为此,Perl 还支持用 q(相当于单引号) 和 qq(相当于双引号) 定义字符串,下面是一个简单的例子。
#!/usr/bin/perl # qq $text = qq(i'm Shang Bo); # 相当于 "i'm Shang Bo" # q $text = q(i'm Shang Bo); # 相当于 'i\'m Shang Bo' # ()可换为<>,{},[],//,;; 等配对字符
转义字符
Perl 支持如下转义字符。
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\f | 换页 |
\b | 退格 |
\a | 响铃 |
\e | Esc |
\nnn | ASCII值,n为任何八进制数字 |
\xnn | ASCII值,n任何十六进制数字 |
\cC | Ctrl+C,C为任何字母 |
\\ | 反斜线 |
\" | 双引号 |
\l | 将下一个字符转成小写 |
\L | 将到\E为止的所有字符转为小写 |
\u | 将下一个字符转成大写 |
\U | 将到\E为止的所有字符转为大写 |
\Q | 将到\E为止的非单词加上反斜线 |
\E | 结束\L,\U,\Q |
undef 和 defined
在 Perl 中,如果我们声明了一个标量而没有给它赋值,那么该标量的初始值就是特殊的 undef,下面的例子演示 undef 的两种用途,我们也可以通过 defined 函数来判断某个标量是否已赋值。
#!/usr/bin/perl $a; # 此时 $a 的初始值为 undef $a = 0; undef $a; $a = undef; # undef 的一种用法是把一个已赋值的变量定义为 undef if(defined $a) { print '变量 $a 已赋值'; } else { print '变量 $a 未赋值'; } # undef 的另一种用法是用它来代替我们不需要的值 ($name,undef,$age)=split(/:/,"尚波:大连:五年级:5"); print "\n我叫$name,我今年$age\n";
-- 更多参见:Perl 精萃
-- 声 明:转载请注明出处 -- Last Updated on 2012-06-17 -- Written by ShangBo on 2012-06-10 -- End