码迷,mamicode.com
首页 > 其他好文 > 详细

perl: 数据类型 和 运算符

时间:2015-04-23 17:27:27      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:perl

Perl数据类型和运算符:

 

-----------------------

布尔类型bool:

数字:0为假,其它为真。

字符串:空字符串为假(包括‘0’),其它非空为真。

 

--------------------------

Perl的标量scaler:

1.数字:整数、浮点数

2.字符串:单引号、双引号

 

浮点数直接量:

可以用小数点表示也可以用指数表示.

 

整数直接量:

在perl里整数其实都是转换成浮点数运算的.

有十进制、二进制(0b开头)、八进制(0开头)、十六进制(0x开头)。

 

数字的操作符:

+ - * / 

%  取模(求余)

** 乘幂

 

数值相关函数:

abs     VALUE:  返回绝对值

rand   :     返回[0,1)之间的随机分数.

rand    EXPR: 返回[0,expr)之间的随机分数.

srand   EXPR: 为rand设置随机数种子.在相同的随机数种子下rand结果相同.

sqrt    EXPR: 返回正数的平方根.

int

hex

oct

exp

log

atan2

sin

cos

 

单引号字符串中的值除了反斜线和单引号都是原样输出。

‘\\’    :输出下划线

‘\’’    :输出单引号

‘\n’    :输出\n,而不是换行。

 

双引号字符串中的标量变量内插:

“$var”    :  标量变量内插

“@arr”:数组内插

“@arr[index]” :数组元素内插。

“%hash{“key”}”: 哈希元素内插

“\n”:换行

 

字符串的操作符:

.   连接操作

x   重复操作

 

标量相关函数:

chomp    VARIABLE

去掉结尾的\n。

chop    VARIABLE

 

reverse    LIST

翻转数字或字符串。

 

index    STR,SUBSTR[,POSITION]

在str中从position往后开始找substr,返回从0开始的首次出现的位置.否则返回-1.

 

rindex    STR,SUBSTR[,POSITION]

在str中找position之前的substr,返回从0开始的最后一次出现的位置,否则返回-1。

 

substr    EXPR,OFFSET[,LENGTH[,REPLACEMENT]]

返回从0开始的expr字符串中从offset开始往后的length长度的子串。

如果给出replacement就用它替换选中的子串。

省略length就是到expr结尾。

offset为-1表示expr的最后一个字符,

substr($string, offset,length) = “newstring”;    #改变原来字符串中选中部分的值。

 

sprintf    FORMAT, LIST

返回格式化后的结果,可以保存到一个字符串中使用。

参数和printf一样。

 

length    EXPR: 返回字符串长度.

chr    EXPR:将数字变成字符.

ord    EXPR:将字符变成数字.

hex

oct

lc

lcfirst

uc

ucfirst

crypt

pack

 

"tr///","q//", "qq//","y///"

 

----------------------------

标量变量:

Perl的变量也叫标量变量,就是存储标量的变量.使用$开头。

Perl的变量对大小写敏感,变量以字母下划线数字组成,但是不能用数字开头.

小写字母表示普通变量,大写字母用来表示特殊变量.

使用首字母大写或下划线来赋予变量具体含义.

变量最好用{}括起来。

默认情况下perl中的所有变量都是全局变量。

 

“$var”   : 双引号字符串中的标量变量会被当前的值替换掉。

 

perl的标量的操作符都支持复合赋值:

+/-/*//=

%=

**=

.=

x=

 

综合函数:

 

undef函数:

还没有赋值就使用的标量变量就是undef的,数字默认为0,字符串默认为空字符串。

$var = undef;     #创建一个undef值。

 

defined函数:

如果$val是undef值函数返回假,否则返回真。

 

formline

lock

prototype

reset

scalar

 

------------------------------------

perl的列表list:

列表就是标量的有序集合,列表是标量。

列表中的元素可以是标量、列表和表达式。

列表中使用的数组其实是转换成了列表。

列表中使用的变量其实是转换成了标量。

列表除了用小括号()来做定界符还可以使用任何标点符号。

qw!/#/$/%str1   str2 …!/#/$/%

qw[/{/<str1   str2  …]/}/>

 

(var1, var2 …) :就是小括号中用逗号隔开的一系列值。

(var1..val2):使用范围操作符..每次加1,var1要小于var2。

():空列表

(var1..var2):var1大于var2就是空列表。

(list)[n] :  列表的切片

(list)[m,n,x,…] : 同时获取多个元素,切片的下标可以使任意的。

 

列表的值可以赋给变量:

($var1, $var2 …) = (val1,val2 …);

如果列表的值多了就忽略,如果变量的值多了就使undef值。

 

互换两个变量的值:

($a, $b) = ($b, $a);  

($arr[m], $arr[n]) =($arr[n], $arr[m]);

 

qw//:    

单词列表

qw(str1   str2  …):qw列表,perl将其解释为多个单引号内的字符串,不能再其中使用\n或标量变量,其中的空白字符会被抛弃。

 

reverse:

@arr= reverse(list);    #将list中的元素反转然后返回给arr,list不变。

@arr= reverse list;    #同上

 

sort:

@sorted= sort(list);    #根据ACSII对list排序,将结果返回给sorted,list不变。

@sorted= sort    list;

 

join    EXPR,LIST: 用expr分隔list的元素.

 

grep    BLOCK    LIST

            EXPR,     LIST

从list中根据block或expr的规则选出符合条件的值。

 

map  BLOCK    LIST

      EXPR,    LIST

 

unpack    TEMPLATE[,EXPR]

 

------------------------------

perl的数组array:

数组是存储列表的变量,数组是变量。

数组长度没有上限的,没有定义的数组元素就是undef值。

数组元素通过下标来访问和赋值的。

最后一个数组元素的索引也可以是-1。

 

$arr[index] = val;

print   ”$arr[index]”;

$#arr:数组最后一个元素的索引值(下标),数组为-1。

$arr[$#arr] == $arr[-1]

@arr : 用@来引用整个数组

@arr1 = @arr2;    #其实是列表的复制,只是用数组的形式而已。

@arr = ();    #清空数组

print    “@arr\n”;   #可以直接打印整个数组

print    @arr;   #打印整个数组,没有空格

@arrays[n] :   数组切片

@arrays[m,n,…] :数组切片

“@arr” : 双引号中的数组会被数组的当前前值替换掉。

“@arr[index]” : 双引号中的数组元素会被元素当前值替换掉。

双引号中的@name如果不是表示数组需要写成\@name。

 

数组相关函数:

 

pop

$var= pop(@arr);    #把数组arr中的最后一个元素取走并返回。

pop    @arr;         #同上

如果数组是空的仅仅返回undef。

 

push:

push(@arr, val);    #添加val到数组的尾端

push  @arr,list;    #同上

 

shift

$var = shift(@arr);    #把数组arr中的第一个元素取走,并返回。

shift  @arr;    #同上

如果数组是空的返回undef。

 

unshift:

unshift(@arr, val);    #在数组开头放入val。

unshift   @arr, list    #同上。

 

keys     

values

each

splice

 

----------------------------------

perl的哈希类型hash:

哈希由无序的键值对组成,键必须是唯一的字符串(或结果为字符串的表达式),值可以是任意类型的任意值。如果对已存在的哈希元素赋值就会覆盖之前的值。

通过键来检索哈希或者给哈希赋值:

$hash{$key}

$hash{“keystring”} = “value”;

%hash 用来表示整个哈希。

@arr = %hash;    #哈希松绑,将哈希变成键值对的列表。

%hash = @arr/list;    #数组或列表会变成键值对。

%newhash = %hash;    #复制哈希

%inverse_hash = reverse   %hash;   #将键值对位置互换,键变成了值(值唯一才有用)。

print    %hash;   #打印的是没有空格的键值对,哈希不能内插。

($hash{“key1”}, …)  :  哈希切片

@hash{ qw / key1 …/ }   : 哈希切片

 

常用的hash写法(使用胖箭头):

my %hashname = (

    “str1” => “val1”,

    “str2” => “val2”,

);

 

%ENV哈希用来存放环境变量。

Print “PATH =$ENV{PATH}\n”;    #打印path环境变量

Print “CHARACTER =$ENV{CHARACTER}\n”;    #打印在程序外设置的环境变量

 

哈希相关函数:

 

keys HASH:

my@arr = keys %hash;    #获取哈希的键列表。

my$count = keys %hash;    #获取键值对个数。

 

values HASH:

my@arr = values %hash;    #获取哈希的值列表。

 

each HASH:

($key,$value) = each    %hash;    #遍历哈希键值对。

while(($key, $value) = each %hash) {

    print “$key => $value\n”;

}

 

exists  expr:

exists$hash{“key”};      #检查中是否有某个键。值是undef的键也是存在的。

if(exists $hash{“key}) {

    print “The key exist in the hash.”;

}

 

delete expr:

delete    $hash{“key”};    #从hash中删除指定的键和这个键对应的值,删除之后就不存在了。

 

-------------------------------------

perl中的上下文:

 

在标量上下文中使用产生列表的表达式:

$num = @arr会自动转化为数组的个数。

sort在标量上下文返回undef值。

reverse在标量上下文中先将所有字符串连在一起然后再反序。

 

在列表上下文中使用产生标量的表达式:

自动产生一个仅含一个标量值得列表即可。

 

从列表上下文切换到标量上下文使用伪函数scalar:

scalar(@arr);    #此处不是数组而是数组元素个数。

scalar    @arr;   #同上  

 

列表上下文中的<STDIN>:

在标量上下文中返回数据的下一行,也就是输入回车返回。

在列表上下文中返回所有行,直到文件结尾EOF或ctrl+d,每一行都是列表中的元素。

chomp(@lines =<STDIN>);    #去掉每一行结尾的换行符。

 

--------------------------------------------

Perl操作符的优先级和结合性:

():括号操作符

->: 方法调用

++      --:自增,自减,

**:数值乘幂,右结合

\        !(逻辑非)     ~(按位取反)    +()   -() : 单目操作符,右结合

=~      !~ :绑定操作符

*   /  %   x : 数值乘、除、求余,字符串重复

+   -  .  :数值加、减,字符串连接

<<   >>  : 按位左移/右移

<   <=  >   >=   lt  le   gt   ge:数值比较,字符串比较

==    !=   eq   ne   <=>  cmp   : 数值相等、不等,字符串相等、不等

& :按位与

|   ^ :按位或、异或

&& : 逻辑与

|| :逻辑或

//:逻辑否定

?::三目操作符,右结合

=   (…)= :赋值和复合赋值,右结合

,=>  : 分隔符

not :非,右结合

and : 与

or   xor  :或、异或

 

自增自减++/--:

$count{$_}++   foreach  @arr;   #可以用来统计数组中字符串出现的次数。

foreach (@arr) {

    print “$_\n”

        if $seen{$_}++;       #可以查看arr数组中的重复出现的单词。

}

 

三目操作符?::

condition1 ? expression-true: expression-false

 

逻辑运算:

!expr;   #逻辑非

expr1  && expr2;     #如果expr1为真才计算expr2,否则直接跳过expr2。

expr1  || expr2;    #如果expr1为假才计算expr2,否则直接跳过expr2。

my  $val = $arg1 // $arg2;   #逻辑否定,如果arg1是undef那么val=arg2,否则val=arg1。

 

定长数据或记录的内建函数:

"pack","read", "syscall", "sysread","sysseek", "syswrite",

"unpack","vec"

perl: 数据类型 和 运算符

标签:perl

原文地址:http://blog.csdn.net/wowotouweizi/article/details/45224037

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!