本文共 1990 字,大约阅读时间需要 6 分钟。
-- 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 |
在 Perl 中,如果我们声明了一个标量而没有给它赋值,那么该标量的初始值就是特殊的 undef,下面的例子演示 undef 的两种用途,我们也可以通过 defined 函数来判断某个标量是否已赋值。
#!/usr/bin/perl$a; # 此时 $a 的初始值为 undef$a = 0;undef $a;$a = undef; # undef 的一种用法是把一个已赋值的变量定义为 undefif(defined $a) { print '变量 $a 已赋值';}else { print '变量 $a 未赋值';}# undef 的另一种用法是用它来代替我们不需要的值($name,undef,undef,$age)=split(/:/,"尚波:大连:五年级:5");print "\n我叫$name, 我今年$age\n";
-- 更多参见:
-- 声 明:转载请注明出处
-- Last Updated on 2012-06-17 -- Written by ShangBo on 2012-06-10 -- End