设为首页 收藏本站
查看: 577|回复: 0

[经验分享] Perl 学习小结

[复制链接]

尚未签到

发表于 2017-5-17 09:20:28 | 显示全部楼层 |阅读模式
  Perl 的意思
  Pracctical Extraction and Report Language    实用摘录与报表语言
  Pathologically Eclectic Rubbish Lister    病态折中式垃圾列表器
  是先有Perl这个词,后有展开诠释,两种解释都被Larry认可.
  Perl 的原则
  一:数据类型
  1.常量 

  常量用$变量名定义


$name = "ahcming";              # 定义一个字符串常量
$age = 24;                      # 定义一个数字常量
  1)数字.在Perl中,数字都是按双精度浮点数进行运算

255                                           # 数字默认是十进制
0377                                          # 八进制(octal)数字以0开头,十进制等于255
0xFF                                          # 十六进制(hexadecimal)数字以0x开头,十进制等于255
0b11111111                                    # 二进制(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,4
2.push                                    # 向数组尾压入元素,可以是多个
push(@array, 5);                          # @array现在是1,2,3,4,5
push @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数组压入@array
3.shfit                                   # 弹出数组头部元素
@array = qw#dino fred barney#;
$name = shift(@array);
4.unshift                                 # 在数组头部压入一些元素,基本用法同push
5.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)清空hash
undef(%hash);
  e.哈希的哈希

// 有好例子时补上
   二:代码流程控制
  1.顺序
  2.选择

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

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

next;                         # 退出本次循环,相当C中的continue
last;                         # 退出所有循环,相当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;
}
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-378358-1-1.html 上篇帖子: perl地址转换 下篇帖子: 昨天的perl work shop
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表