标签: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
原文地址:http://blog.csdn.net/wowotouweizi/article/details/45224037