加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl: 数据类型 和 运算符

发布时间:2020-12-15 23:45:54 所属栏目:大数据 来源:网络整理
导读:Perl数据类型和运算符: ? ----------------------- 布尔类型bool: 数字:0为假,其它为真。 字符串:空字符串为假(包括‘0’),其它非空为真。 ? -------------------------- Perl的标量scaler: 1.数字:整数、浮点数 2.字符串:单引号、双引号 ? 浮点

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,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??? “@arrn”;???#可以直接打印整个数组

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

@arrays[n] :?? 数组切片

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

“@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 => $valuen”;

}

?

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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读