首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

Perl 学习总结

2012-10-31 
Perl 学习小结Perl 的意思?? Pracctical Extraction and Report Language??? 实用摘录与报表语言?? Pathol

Perl 学习小结

Perl 的意思

?? Pracctical Extraction and Report Language??? 实用摘录与报表语言

?? Pathologically Eclectic Rubbish Lister??? 病态折中式垃圾列表器

?

?? 是先有Perl这个词,后有展开诠释,两种解释都被Larry认可.

?

Perl 的原则

?

一:数据类型

?? 1.常量?

?? 常量用$变量名定义

$name = "ahcming";              # 定义一个字符串常量$age = 24;                      # 定义一个数字常量

??????? 1)数字.在Perl中,数字都是按双精度浮点数进行运算

255                                           # 数字默认是十进制0377                                          # 八进制(octal)数字以0开头,十进制等于2550xFF                                          # 十六进制(hexadecimal)数字以0x开头,十进制等于2550b11111111                                    # 二进制(binary)数字以0b开头,十进制等于255

???????数字运算符

+                # 2 + 3 = 5-                # 2 - 3 = -1*                # 2 * 3 = 6/                # 2 / 3 = 0.66666666666%                # 取模运算 2 % 3 = 2**               # 乘幂运算 2**3 = 8
??

??????? 2)字符串.

????????????? 字符串可以被单引号括起来,也可以被双引号括起来,两者的区别如下

'ahcming'                        # 7 个字符"ahcming"                        # 同'ahcming'一样'ahcming\n'                      # 9个字符,\,n 分别算两个字符"ahcming\n"                      # 8个字符, \n算一个字符(换行符)

????????? ?也就是说双引号中的字符串会对那些特殊字符,变量自动进行替换,而单引号则会原封不动的进行输出.

?

??????????? 字符串操作符

a.字符串连接 ".""hello" . "world"       # 等同于"helloworld"b.字符串重复 "x""ahcming" x 3           # 等同于"ahcmingahcmingahcming"c.比较操作符eq              # 相等ne              # 不等lt              # 小于gt              # 大于le              # 小于等于ge              # 大于等于
?

?? 2.数组

??? 一些数组常见用法

@names;                           # 定义一个数组$names[0];                        # 引用第0个元素,数组下标从0开始$names[2] = "intoms";             # 向第2个元素赋值,注意,现在@names有3个元素了$names[-1];                       # 引用@names中最后一个元素,也就是intoms$names[-100];                     # 试图引用倒数第100个元素,严重错误

?

?? 数组初始化及赋值

@num1 = (1,3,50);                         # 包含3个元素的数组@num2 = (1..100);                         # 包含从1到100的100个元素的数组@num3 = ($n..$m);                         # 如果$n<=$m, 则包含$n,$m之间的整数,如果 $n>$m,则数组为空@str = qw(s1,s2,s3,s4);                   # qw 的好处是s1,不用用引号括起来@path = qw{/usr/bin, /home/aaa, .};       # qw 的定界符可随意
?

?? 对数组进行操作的方法

1.pop                                     # 弹出数组尾元素@array = 1..5;$num = pop(@array);                       # $num = 5;@array现在是1,2,3,42.push                                    # 向数组尾压入元素,可以是多个push(@array, 5);                          # @array现在是1,2,3,4,5push @array, 6..10;                       # @array 现在是1,2,3,4,5,6,7,8,9,10@ohers = qw/5 4 3 2 1/;push(@array, @others);                    # 把others数组压入@array3.shfit                                   # 弹出数组头部元素@array = qw#dino fred barney#;$name = shift(@array);4.unshift                                 # 在数组头部压入一些元素,基本用法同push5.reverse                                 # 转置数组@num = 6..10;@num2 = reverse(@num);                    # @num2是10,9,8,7,6,@num没有改变6.sort                                    # 按照ASCII顺序对数组进行排序
?

?? 3.哈希

?????? 哈希也可以称做关联数组,散列等等

??? a.定义

%hash=();                # 声明一个空的hash%hash={};               # 声明一个数组类型的空hash%hash=("lincon",25,"ahcming",13);%hash=("lincon"=>25, "ahcming"=>13);    # 以上两种写法相同,不过下面的更清楚点

?? b.访问hash

%hash{key}            # 返回hash中key对应的value,如果hash中不存在key,则返回undef当%hash没有初始化时可以用exists(%hash{key})来判断是否存在key// 有好的例子时补上 $value = exists(%hash{key})?$hash{key}:defaultValue;$hash{key} = value;     # 向hash中放入key==>value的键值对 

??? c.遍历hash

for $key ( keys(%hash) ) {     print $key . ", " . $hash{$key} . "\n";}while( ($key,$value) = each(%hash) ) {    print "$key ==> $value\n";}

?? d.其它操作

i) 获得hash的长度$hash_size = keys(%hash);     # %hash的长度放到$hash_size中print scalar keys(%h) . "\n";         # 打印%h的长度。这里用了scalar来返回数组长度ii)清空hashundef(%hash);

?? e.哈希的哈希

// 有好例子时补上
?

二:代码流程控制

?? 1.顺序

?? 2.选择

1.单ifif( boolean表达式 ) {    # 一些操作}2.if-elseif( boolean表达式 ) {    # 一些操作} else {    # 当条件为假的操作}3.if-elsif-elseif( boolean表达式 ) {    # 一些操作} elsif( boolean表达式 ) {    # 一些操作} else {   # 其它情况的操作}
?

?? 3.循环

1.for 循环for( $x = 0; $x < 10; $x++ ) {   #}联想C语言,你就知道其它形式的 for循环应该怎么写了,比如无限循环for(;;) {   # }2.foreachforeach (@array) {   # 依次从读取数组中每个元素放在$_中}foreach $e (@array) {   # 依次读取@array中每个元素放到$e中}3.whilewhile( boolean 表达式 ) {   # 一些操作}

?

? 退出循环:

next;                         # 退出本次循环,相当C中的continuelast;                         # 退出所有循环,相当C中的break

?

三:定义子过程

常用格式

sub funName {    #return xxx;}

?

说明:

???? 1.funName 是进程名称.通过&funName()进行调用方法

&fun();                       # 无参调用 &fun("ahcming", 18);          # 推荐这两种形式调用方法fun("ahcming", 18);           # 只要不与perl系统函数名冲突,就可以去掉&fun "ahcming", 18             # 只要加上括号看起来想函数,他就是函数,如果不影响语义就可以去掉括号
?

???? 2.funName 可省略,那就相当于匿名方法,用法如下

$value = sub {   # 一些操作   # 返回一个值,数组,对象什么的}

?

? 3.参数的传递.

?????? 所有的参数,不论数目,类型,都放在一个数组($_)里面

?????? 参数传递是引用传递(因为放在数组里面),所以在方法里面对参数进行修改会影响到外面的变量

?????? 可以有方法里面用my 到接收到的参数再进行声明,形成局部变量

sub fun {   my($value, @array, %map) = $_;   # 对参数进行处理   # 逻辑运算   # 其它乱七八遭的}
?

??? 4.返回值

????? 方法可以用return 显式的指定返回值,也可以隐式的指定,隐匿指定的规则是方法的最后一行的结果就是方法的返回值

sub fun {   # xxxxxxx   # xxxxxxxxx   # waitarray 可用来判定调用方法的语意环境是列表还是标量   return waitarray?@array:$value;}
?

?

?

热点排行