常量
在程序运行中,其值不能改变且为一定值的量称为常量。PERL的常量有两种:数字常量和字符串常量。、
标量:单件事物。数字,字符串
可以用操作符对标量进行操作,结果通常也是一个标量。
常量用途:
1. 给变量赋值。
2. 作参数传递给函数。
数字常量
数据标量:
PERL里,总是按“双精度浮点数”来保存和运算。不存在整数。所谓整数,其实也是双精度浮点数。
Perl允许在整数直接量里插入下划线,将若干位分开:
21_321_567_654
非十进制的整数直接量:
0:八进制 0123 # 83
0x:十六进制 0xff
0b:二进制 0b101110
数字操作符:+ - * / %
%:取模操作符,先取整后再求余。
**:乘幂,2**3,表2的3次方。
字符串常量
在PERL中,字符串一般用双引号或单引号括起来,包含任何字符。
单引号与双引号的区别:
1. 单引号内的字符串直接量:不转换
#!/usr/bin/perl
$object = "apple";
$string = 'this is an $object';#单引号
print $string;
输出:this is an $object
2. 双引号内的字符串直接量:转换(变量插入)。
#!/usr/bin/perl
$object = "apple";
$string = "this is an $object";#双引号
print $string;
输出:this is an apple
3.双引号识别转义字符而单引号只识别两个特殊转义字符(/’,//)
$string = 'he//she is a student';
$string1 = '/'nothing here/'';
$string2 = 'no/nyes';
print "识别//:",$string,"/n";
print "识别/':",$string1,"/n";
print "不能识别:",$string2,"/n";
输出:
识别/:he/she is a student
识别':'nothing here'
不能识别:no/nyes
字符串操作:
.:拼接
"hello"." world" #等同于"hello world"
x:重复操作符
"fred"x2 # "fredfred"
5x4 # 5555
数字和字符串的自动转换:
对数字进行运算的操作符(如乘法)如果遇到数字字符串的操作数,perl会自动将数字字符串转换成等效的十进制浮点数进行运算。
数字字符串:”12345”
例:
$num1 = "12345";
$num2 = "1";
print $num1 + $num2;
非数字符串的转换:
$num1 = "123.5abc";
$num2 = 1;
$num3 = "abc123";
$sum1 = $num1 + $num2;
$sum2 = $num2 + $num3;
print "123abc + 1 = ",$sum1,"/n";
print "abc123 + 1 = ",$sum2,"/n";结果为:
123.5abc + 1 = 124.5
abc123 + 1 = 1
字符串中非数字部分会被略过。
"12fred34"*"3" # 36
完全不含数字的字符串会被转换成零。
“a123”*”2” # 0
非数字符串的转换规则:
混合字符串运算中,把混合字符串从左到右取出字符,直到取到第一个非数字字符为止,那么此之前所取的浮点数用来参与运算。
变量
PERL变量基本类型:
1.标量:可以存放数字和字符;
2.数组:多个标量的集合;
3.散列:一程特殊的数组,关联数组。
两种衍生变量:
1.引用:特殊的标量,类似于C的指针;
Perl中的数据类型少,却可以用简单的数据类型,生成相当复杂的数据结构,并且具有很快的数据操作能力。
变量命名:
一般变量名以小字字母,大写字母或下划线开头,后面可以有数字,字母,特殊字符,而且长度没有限制。如:$haha,$string等等。
当变量以数字开头时,它是一种特殊变量,叫反引用变量,变量名必须全为数字。如:$123;变量名也可以为单个字符,此字符非字母、非数字和非下划线,它也是特殊变量,叫内置变量。
在变量命名时,前面必须加指示符,指示变量类型:
1.$为标量; $haha
2.@为数组; @array
3.%为散列; %hash
4.句柄比较特别,没有指示符。
PERL区分大小写。
$haha = 111;
$HaHa = 222;
print "小写:",$haha,"/n";
print "大写:",$HaHa,"/n";
结果:
小写:111
大写:222
变量赋值:
标量:
$num = 123;
$char = “abcd”;
数组:
@array = (“123”,”234”,”345”);
$array[1] = 23;
散列:
%hash = {“age” => 18,”you” => 34};
$hash{“age”} = 28;
变量作用域:
1.全局作用域:PERL默认作用域。
2.局部作用域:只有在函数内才能使用。local(),my()操作符.
$char1 = "all";
my $char2;
$char2 = "out";
{
my $char3;
$char3 = "in" ;
print "$char1,$char2,$char3/n";
}
print "#####################/n";
print "$char1,$char3/n";
结果:
all,out,in
#####################
all,
$char1 = "all";
my $char2 = "out";
{
my $char2;
$char2 = "in";
print "$char1,$char2/n";
}
print "$char1,$char2/n";
结量:
all,in
all,out
local与my的区别:
local:定义的变量除了在块内有效外,在块内调用的子程序也可以访问它,即使此子程序在块外定义。
My:定义的变量对块内的子程序也不可见。比local更安全。
内置变量:
为了编程方便和补充语法不足。
内置变量表
变量 |
长名格式 |
含义 |
$_ |
$ARG |
|
$& |
$MATCH |
最近成功匹配模式所对应的字符 |
$’ |
$PREMATCH |
最近成功匹配模式之后的字符 |
$+ |
$LAST_PAREN_MATCH |
|
$* |
$MULTILINE_MATCHING |
控制字符串多行匹配的开关 |
$. |
$INPUT_LINE_NUMBER |
最近文件句柄读取的当前输入行号 |
$/ |
$INPUT_RECORD_SEPARTOR |
输入记录分隔符 |
$| |
$OUTPUT_AUTOFLUSH |
控制是否进输出缓冲的开关 |
$, |
$OUTPUT_FIELD_SEParaTOR |
|
$/ |
$OUTPUT_RECORD_SEParaTOR |
|
$” |
$LIST_SEParaTOR |
|
$# |
$OFMT |
打印数字的输出格式 |
$% |
$FORMAT_PAGE_NUMBER |
|
$= |
$FORMAT_LInes_PER_PAGE |
|
$- |
$FORMAT_LInes_LEFT |
|
$~ |
$FORMAT_NAME |
|
$^ |
$FORMAT_TOP_NAME |
|
$: |
$FORMAT_LINE_BREAK_CHaraCTERS |
格式中要分隔字符串以填满连续字段之前的字符设置 |
$! |
$ERRNO |
错误号的当前数字或字符串 |
$0 |
$PROGRAM_NAME |
所运行的PERL脚本的文件名 |
$$ |
$PROCESS_ID |
运行该程序的PERL进程号 |
$< |
$REAL_USER_ID |
进程的实际用户ID名 |
$> |
$EFFECTIVE_USER_ID |
进程的生效用户ID名 |
$( |
$REAL_GROUP_ID |
进程的实际组ID名 |
$) |
$EFFECTIVE_GROUP_ID |
进程的生效组ID名 |
$[ |
$ |
数组的起始索引号 |
$] |
$PERL_VERSION |
PERL解释器版本号 |