微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据类型之标量

-- 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐