博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据类型之标量
阅读量:4049 次
发布时间:2019-05-25

本文共 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

 

undef 和 defined

在 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

 

你可能感兴趣的文章
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
微信小程序开发全线记录
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
机器学习实战之决策树(一)
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[LeetCode By Python]121. Best Time to Buy and Sell Stock
查看>>