PERL语言学习二PERL常量与标量

常量

         在程序运行中,其值不能改变且为一定值的量称为常量PERL的常量有两种:数字常量字符串常量。、

 

标量:单件事物。数字,字符串

可以用操作符对标量进行操作,结果通常也是一个标量。

 

常量用途:

1.  给变量赋值。

2.  作参数传递给函数

数字常量

数据标量:

PERL里,总是按“双精度浮点数”来保存和运算。不存在整数。所谓整数,其实也是双精度浮点数。

 

Perl允许在整数直接量里插入下划线,将若干位分开:

21_321_567_654

 

非十进制的整数直接量:

0:八进制  0123 # 83

0x:十六进制 0xff

0b:二进制 0b101110

 

数字操作符:+ - * / %

%:取模操作符,先取整后再求余。

**:乘幂,2**3,表23次方。

字符串常量

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的指针;

2.句柄:一串标识输入输出的字符串,用来控制输入输出

 

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

 

localmy的区别

local:定义的变量除了在块内有效外,在块内调用的子程序也可以访问它,即使此子程序在块外定义。

My:定义的变量对块内的子程序也不可见。比local更安全。

 

 

内置变量:

为了编程方便和补充语法不足。

内置变量表

变量

长名格式

含义

$_

$ARG

认输入变量或模式搜索空格

$&

$MATCH

最近成功匹配模式所对应的字符

$’

$PREMATCH

最近成功匹配模式之后的字符

$+

$LAST_PAREN_MATCH

最近搜索模式匹配的最后一个括号

$*

$MULTILINE_MATCHING

控制字符串多行匹配的开关

$.

$INPUT_LINE_NUMBER

最近文件句柄读取的当前输入行号

$/

$INPUT_RECORD_SEPARTOR

输入记录分隔符

$|

$OUTPUT_AUTOFLUSH

控制是否进输出缓冲的开关

$,

$OUTPUT_FIELD_SEParaTOR

Print函数输出字段分隔符

$/

$OUTPUT_RECORD_SEParaTOR

Print函数输出记录分隔符

$”

$LIST_SEParaTOR

Print函数输出清单分隔符

$#

$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解释器版本号

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...