perl学习笔记-----------------------(11)

来源:互联网 发布:java程序员必看书籍 编辑:程序博客网 时间:2024/06/08 00:56
标量存储单一的数据项,表包含多个数据项。标量是实际的数据类型,perl没有表这样的数据类型。标量和表的差异是一种工作环境而非数据类型。Perl知道你当前是工作在标量环境还是表上下文。例如,如果代码在表上下文中使用了函数或运算符,就可能将它的返回值赋给表;如果函数是在标量环境中使用的,Perl就知道你需要标量数据项。表与标量不同的是,在perl中并不能得到实际的表数据类型。也就输说,没有什么存储类型的名字叫表。在编程代码让它一次同时处理多个数据项时,就是在使用表,使用表语法。例如,给标量分配数据可能就像这样:$x=1; 而给表赋值可能像这样:($x,$y)=(1,2);
表并不代表像标量那样的存储格式。perl只有3种不同的数据格式:标量、数组、哈希表。标量:最简单的变量,存储单一的数据项:数字、字符串。在标量名的前面使用$号。在perl中对每个数据类型必须使用不同的前缀:标量用$、数组用@、哈希表用%、甚至在一些并非数据格式的项前面也使用了前缀:子程序的名字使用&,而通配量使用*。
perl中3种不需要前缀的项命名:文件句柄、格式名称、目录句柄。标量的两种类型是数字和字符串。给标量赋值时使用=预算符,如:$scalarl=5;$scal=”hello there!“;在perl的运算符和函数里也可以使用标量。所用的运算符和函数通常取决于标量数据是数字还是字符串。标量代表了存储数据项的实际内存位置;字符串或数字这些变量是perl存储的数据的最基本单元。表:数据元素的列表,那些元素并不一定是标量数值,它们本身可以是数组或哈希表,甚至其他表。表是将数据元素联系起来的结构,可以通过把这些项放在括号中并用逗号分隔开的方法指明.例如:print("H","e","l","l","o");
perl中的函数分为两组:一组期望标量作为变量,另一组则希望变量为表。perl是基于程序工作环境做出决定的,两个最重要的工作环境就是标量环境和表上下文。如果perl预期使用表,它就会将数据看作是表;如果预期使用标量,它就会将数据看作是标量。在标量环境中,表可以变成标量,而在表上下文中,标量经常变成元素的表。标量实际就是内存里的数据空间的名字,数据就存储在该数据空间中,它可能是数字或字符串。使用$x=100;创建的标量是全局变量,这意味着可以在当前脚本的任何地方使用它们,但可以通使用含有my和local关键字的声明将它们局部化。
变量名可以含有字母、数字、下划线。这样的名字必须以$符号开头,以避免它与perl的保留字冲突。变量名区分大小写,$variable和$Variable不同。在开头的$之后,可以使用任何字母或下划线作为第一个字符。
PS:用数字作为$后的第一个字符。但是,如果变量名以数字开头,它必须全部由数字组成。
所有标量名前都要使用$符号做前缀。perl中使用的所有前缀及用处如下:
1.$——标量
2.%——哈希表(关联数组)
3.@——数组
4.&——子程序
5.通配量——如*myval代表myvar的每种类型,如@myvar,%myvar等
perl中无需声明标量在使用它们,第一次使用标量时,如果它并不存在,perl就会创建它。标量除了单独赋值外还可以使用同样的语句创建多重赋值如:$=$y=$z=1;在这个例子中,每个标量都设置了同样的数值:1。
左值通常代表内存里的数据空间,可以使用左值的名称存储数据。所有变量都可以作为左值。perl支持很多数字格式:整型(123)、浮点型(1.23)、科学型(1.23E4)、十六进制(0x123)、八进制(0123)二进制(0班01010)、下划线型(1_234_567)。
下划线型的数字类型,它能够将数字格式化为3个一组以便于辨认。例如:$variable=1_234_567;perl对于所有的数值计算都使用了双精度,同时其内部存储也是双精度。
标量可以容纳perl的未定义数值undef,某些函数返回这个数值,可以通过使用defined函数来检查。如果直接检查undef量,在数字环境中它被解释为数值0,在文字环境中,被解释为空字符串""。也可以通过使用undef函数将变量设置给undef值。perl中很多地方使用undef,在数字不合适的情况下,诸如sysread这样的函数返回值也是undef。未初始化的标量实际上也是未定义的。
通配量可以表示任何一种变量的数据类型。例如:数字常量类型常量。创建常量可以将引用赋值给通配量。例如:建立MAXFILES来保存所能容纳文件的最大数量:*MAXFILES=\100;通过$MAXFILES访问这个常量,像标量一样:*MAXFILES=\100; print"$MAXFILES\N";
Perl用两种方法在标量中存储真值和假值,对应于两种标量环境:数字和字符串环境。PS:在数字环境,”0“代表假,其余任何数值代表真;在字符串环境中,空字符串”“代表假,其余任意数值(包括负值)代表真。用非零值来代表真的事实对创建循环这样的历程特别有用。例如:while循环始终持续,因为<>总是返回一些东西,即使用户键入空行,在这种情况下<>返回换行符。
while(<>){print;}
PS:在检查未定义变量时,不是检查假值,当需要时,通过defined函数检查未定义变量。使用pack和unpack函数将数字转换为字符串或二进制以及反过来。将十进制转换为二进制:首先将数字按照网络字节顺序打包(也叫高字节在前顺序),然后逐位将其解包,如下:
$decimal=4;$binary=unpack("B32",pack("N",$decimal));print $binary;
pack函数将值打包到字符串;unpack将打包字符串解包为值。perl中八进制数使用打头的o指明,例如:0123:$x=o123;要想转换成八进制或从八进制转换,那就使用sprinf和oct函数。
1.将十进制转换成八进制使用sprintf函数,附带%o转换符:
print sprintf "%lo",16;
2.将八进制转换为十进制使用oct函数
print oct 10;
如果不指明想要转换的数值,这个函数默认使用$_。在perl中,十六进制数写的时候开头带有ox,比如ox1AB;$x=ox1AB;要想转换成十六进制或从十六进制转换,需使用sprintf和hex函数。
1.十进制转换成十六进制用sprintf函数,附带%x转换符号:
print sprint "%lx\n",16;
2.将十六进制转换成十进制使用hex函数:
print hex ox1AB;
如果不向hex函数传递想要转换的数值,这个函数默认使用$_.

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大v线做到假线了怎么办 有个摄像头网段不同搜不到怎么办 百度网盘离线下载有违规内容怎么办 抖音上传的照片与音乐不同步怎么办 社保卡里面的钱用完了怎么办 医保卡里面的钱用完了怎么办 手机通知栏变成了搜索栏怎么办 小米手机账号密码忘了手机号怎么办 暑假工没签合同押工资了的怎么办 在日本雅虎拍卖网站买到假货怎么办 没有百度糯米账号但是买票了怎么办 拼多多商家版登陆密码忘记了怎么办 安卓下载的软件闪退怎么办 老司机影视院开通会员看不了怎么办 梦幻西游手游苹果手机打不开怎么办 拼多多笔订单被判定虚假发货怎么办 苹果手机微信接收不到信息怎么办 内衣穿32太小穿34空杯怎么办 楼下的把下水管道堵死了怎么办?? 微信绑定的手机号码已停机怎么办 绑定微信的手机号停机了怎么办验证 绑定手机停机微信怎么验证码怎么办 五菱之光雨刷开关手柄断了怎么办 快手家长控制模式密码忘了怎么办 有陌生人要求你拉他入群怎么办 手机一天接到多个陌生电话怎么办 阳光惠生活登录密码忘了怎么办 一个身份证注册了两个支付宝怎么办 买手办拆了发现坏了怎么办 六个月宝宝喝贝因美过敏怎么办 超市盘点少的货扣员工工资怎么办 孩子东西在学校被偷了怎么办 想退出却不舍的感情不知怎么办? 我被老板摸全身失眠有阴影怎么办 不知道绑定支付宝的微博账号怎么办 银行卡丢了补办后支付宝账户怎么办 未激活的银行卡被锁定了怎么办 手机网银上的钱被盗走了怎么办 支付宝支付失败银行卡扣了钱怎么办 小程序的二次验证码丢失怎么办 苹果手机不小心购买游戏币怎么办