《perl实例精解》学习笔记第二天【变量、数组、哈希】(上)
?《perl实例精解》学习笔记第二天 作者itnihao,转载请注明出处,谢谢合作! 一,关于变量的描述 变量是一种数据项,其值可随着程序的运行而发生变化。 变量可以位于程序的任何位置,并且不需要像在高级语言中那样声明它为特点的类型。 变量的值可以为字符串,数字或是它们的组合。 二,perl变量的类型 A.标量型? ?$变量=值; B.数组型?? ?@数组=('值1','值2','值3'); C.关联数组(常称散列【hash】)? ??????????%hash=('标量1’?=>?‘值1’, ?????????????????'标量2’?=>?‘值2’,?)?; 三,变量的作用范围 变量的作用范围默认是全局的。如需局部变量,需要用相关局部变量函数our,my,local设置 四,变量如何赋值 ??赋值运算符是等于号(=),常将右侧的值赋值予左侧的变量。任何赋的值都代表了一个已经命名的存储空间,称为左值(lvalue) ??语句以分号(;)结尾。 举例 #!/usr/bin/perl $day=12;???????????????????????#变量@months=('Mar','Apr','May');???????#数组%states=?(???????????????????????#散列???'CA'?=>?'California',???'ME'?=>?'Maine',255); font-size:10.5000pt; font-family:'宋体'; ">???'MT'?=>?'Montana',255); font-size:10.5000pt; font-family:'宋体'; ">???'NM'?=>?'New?Mexico',255); font-size:10.5000pt; font-family:'宋体'; ">?????????);print?"$dayn";?????????????????#n换行print?"@monthsn";??????????????print?"$months[0],?$months[1],?$months[2]n";??#打印数组中的值print?"$states{'CA'},?$states{'NM'}n";?????????#打印散列中的值print?$x?+?3,?"n";??????????????????????????#未赋值的为空print?"***$name***n";?????????????????????#为赋值的为空 运行结果如下 五,引号规范 单引号,双引号都可以作为定界符。区别如下 单引号不支持特殊字符,引号内插入的变量无法识别 双引号可以执行变量等特殊字符 反引号,执行shell等系统命令。注意,此处的反引号是~键上面的` Perl提供了用另外一种形式的引号表示方法。q,qq,qx和qw q代表一个单引号????q/Hello/???'Hello' qq代表一个双引号???qq/Hello/??"Hello" qx代表一个反引号???qx/date/???`date` qw代表引用的子列表?@list=qw/red?yellow?blue/;???????@list={'red','yellow','blue'}
六,变量型变量 $number=200;?????????????????????????????????????#数字$name="itnihao";???????????????????????????????????#字符$today=localtime();?????????????????????????????????#perl的内部函数,获取时间print??q/$today,number?is?$number,name?is?$namen/,"n";??#单引号,则变量无法执行print??qq/$today.number?is?$number,name?is?$namen/;?????#双引号,内部变量正确执行print??"$today,${name}'s?perln";???????????????????????#{}后面可以追加值print??qx/daten/;????????????????????????????????????#反引号,执行系统的date命令 在perl中,表示特殊符号,如$100?则用转义即可 defined函数,标量不为有效的字符串,数字的时候,就是未定义的变量,返回null,成功则为1 undef函数?解除已经定义的变量 $_?标量型变量 为$_赋值后,chomp,split和print会把新的$_值当做输入参数 #!/usr/bin/perl $name="itnihao";???????????????????????????#定义变量 print?"name?OK???n"?if?defined?$name;?????????#如果变量定义,显示name?OK print?"name?wrongn"?if?defined?$NAME;?????????#如果变量定义,显示name?wrong undef?$name;????????????????????????????????#取消标量name的值 print?"name?$namen";?????????????????????????#打印$name,此处已经取消 $_="good?night!";?????????????????????????????#赋值 print;????????????????????????????????????????#显示$_ 执行结果 七,数组 7.1数组概念 在perl中,数组是一个有名字的列表,含有有序的标量型变量集合。数组必须以@开头,数组名位于方括号([])之间的下标,非负整,从0开始 举例 @name=("Qiu","Gao","Qi","Shuang");??#数组@list=(2..20);?????#数组,值为2-20的自然数$a=1;????????????#定义三个标量$b=2;$c=3;@items=($a,$b,$c);?#使用含有3个标量的列表对数组初始化$size=@items;?????#将数组赋值给$size标量型变量,值是数组中的元素个数(从0开始)@mammals=qw/dogs?cats?cows/;??#qw数组定界符@fruit=qw(apples?pears?peaches);??print?"@namen";?????????????#单元@name数组的值print?"the?@name????is?$#name+1?wordsn";??#其中$#name是数组的个数(从0算起)print?"$name[0],$name[1],$name[2],$name[3]n";?#依次打印数组中的值print?"the?@list???is?@listn";????????????????#打印数组中的值2-20print?"the?$a?$b?$c?is?@itemsn";?????????????#数组由变量构成print?"the?$size????is?$sizen";???????????????#数组赋值给标量,显示元素个数print?"the?@mammals?is?@mammalsn";????????#使用qw定界符的数组print?"the?@fruit???is?@fruitn"; 7.2特殊标量和数组赋值 $#arrayname?取数组长度,或者是截取数组的长度 $[初始下标为0,也可以不从0开始,不过perl作者不推荐这么做 @grades=(90,87,96,100,86);print?"array?is?@gradesn";print?"The?number?of?the?last?index?is?$#gradesn";$#grades=3;?????#改变了数组的长度,将数组下标缩减为3print?"The?array?is?truncated?to?4?elements:@gradesn";@grades=();?????#使用了一个空列表,使得该数组被清空print?"The?array?is?completely?truncated:@gradesn"; 运行结果如下 如何访问数组 @name[0],表示数组中的第一个标量,以此类推。 @name[-1,-3]?从数组中的倒数第一个标量到倒数第三个标量
7.3数组分片?(Array?Slices) ?当把某个数组的值赋予到另一个数组中时,得到的数组称为数组分片. @names=('Tom','Jack','Green','Pete');@pal=@names[1,2,3];print?"@palnn";($friend[0],$friend[1],$friend[2])=@names;print?"@friendn"; 把元素Tom','Pete赋予数组@names 把数组@names元素1,2和3赋予数组@pal,本行会把数组@names的元素分片存储到@pal数组中。通过抽取数组@names的的分片元素1,2,3,传报个价数组@pal ? @colors=('red','green','orange');($c[0],$c[1],$c[3],$c[5])=@colors;?#创建数组分片,它由$c[0],$c[5])?四个标量型元素组成,注意这个下标编号不是连续的。print?"********************************n";print?"colors?is?",@colors,"n";有值red有值green无值有值yellow有值orangeprint?"*******************************n";print?"?The?size?of?the?@c?arry?is?",?$#c?+?1,".n";??#?$#c是数组C元素的个数(从0开始) ? ? 暂且于此,下篇继续讲解多维数组,散列(哈希),和关于对数据操作的重要变量。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |