一、Perl的四种变量
Scale:$ 纯变量,标量
数组:@
Hash:%
文件:一般是大写来标识!
二、Perl变量的组成
组成:魔术符+标识符
说明:标识符和Python类似!
特殊:没有关键字,但不要和内置变量重复!
练习1
#!/usr/bin/perl
# (1)区分大小写
$var='lower';
$Var='upcase';
print $var."\n";
# (2)变量的长度不限制
$this_is_a_long_legalname="long var";
print "var is $this_is_a_long_legalname\n";
# (3)if是关键字,没有冲突!
$if="key";
print "key bar id $if\n"
三、perl简单变量
(1)整数表示方式
123 正数
0 零
-12 负数
12e2 科学计数方法(1200)
61_123_234 分割整数(不知道是多少位,用下划线_表示分割,其它语言用.号分割,perl"."号有特殊的含义),处理会去除下划线!
012 说明:整数以0开头默认是8进制(octal)-->表示十进制10
0x1f 说明:以0x开头默认是16进制,f不区分大小写!
(2)浮点数
{11.4、-0.3、.3、3.}
5.4e2 e或E,+或-(5.4*10^2)
(3)整数的截取和浮点数的精度(5.16版本)
整数20位以内(包含)不会截取,超过20位,数值太大的时候会以科学计数法的方式保留小数点14位!
浮点数的精度:指数范围在(-309,308),太小会显示0,太大会显示inf(linux平台下)
$var=1234_9876_5432_1012_3451;
print $var ."\n";
$va1=2.23e308;
print "$va1\n";
$var2=9.01E21+0.01-9.01E21;
print $var2;
# 结果:12349876543210123451、inf、0
细节:perl中以双精度(浮点数)方式保存和运算数值的方式
就算写的是整数,在内部也会转换成等效的浮点数类型保存!
但在perl内部,有些运算会将浮点数转换成整型进行,而且也有integer编译器可以强制编译成整型。
(4)字符串变量
两种方式:单引号或者双引号标识的一组字符组成!
单引号:所见即所得,对特殊{',\}如果需要特殊的含义也需要转义!
双引号:弱引用,可以进行变量内插(变量替换)
变量内插的特点:最长匹配(贪婪),如果想最短匹配需要结合{}
注:与shell类似
#!/usr/bin/perl
$str="short";
$string="long";
print "match longest $string\n";
print "match longest ${str}ing\n";
# 结果:match longest long ---> match longest shorting
双引号中的转义字符
练习
# (1)相铃
print "bell ring:\a\n";
# (2)退一个字符-->backspace
print "back#\bspace\n";
# (3)回车-->跳到当行的开头-->abcy
print "copy\rabc\n";
# (4)值表符-->一般是四个空格
print "abc\tdef\n";
# (5)转义-->取消字符的含义{$,",\}
print "the \$var\n";
print "a quote \" in string\n";
print "a quote \\ in string\n";
# (6)\nnn表示8进制的ASCII码,\xnn表示16进制的ASCII码
print "\045\n";
print "\x25";
结果
bell ring:
backspace
abcy
abc def
the $var
a quote " in string
a quote \ in string
%
%
单引号:不进行转义('和\需要表示原始字符还是需要转义),不进行变量替换,字符串可以跨行(相当于\n)
(5)字符串的特殊表示
文本形式-->q(quota)表示引号的含义
好处:单引号和双引号就不需要用\进行转义!
(6)变量的初始值
分析1:声明一个未定义的变量,即使以前有值也是未定义!
分析2:只关心第一个和最后一个,其余的没有值(不占用内存)!
(7)chop和chomp的区别
#!/usr/bin/perl
$a="abcd";
# 说明:chop截去最后一个字符,无论是什么字符!
chop($a);
print "chop $a\n"; #abc
$b="abcd";
# 说明:截去末位的行分割符(一般是\n),由$/来定义,如果行末尾是这个就截去,不是则不变,可以自定义!
chomp($b);
print "chomp $b\n";#abcd
###############分割#####################
# 说明:带换行的--->"|"是为了说明!
$c="abc\n";
chop($c);
print "chop $c|"; #截去的是\n字符
$d="abc\n";
chomp($d);
print "chomp $d|"; #截断的是\n换行符(行分割符号)
###############分割(自定义分割符号)######################
#
# 说明:多个\n连续如何一次性截断--->会产生多个空行(空格)
$e="ab\n\n\n";
# print $e;
# 说明:行分割符由$/(内置变量)来来定义!
$/="";
chomp($e);
print "chomp many $e\n";
#################分割##############################
$/="cd";
$f="abcd";
chop($f);
print "chop $f|";
$n="abcd";
chomp($n);
print "chomp $n|";
结果
chop abc
chomp abcd
chop abc|chomp abc|chommp many ab
chop abc|chomp ab|