`
ahcming
  • 浏览: 19315 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

Perl 学习小结

    博客分类:
  • 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开头,十进制等于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;
}
 

 

 

分享到:
评论

相关推荐

    【9493】基于springboot+vue的美食信息推荐系统的设计与实现.zip

    技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!

    (源码)基于Spring、Struts和Hibernate的OA系统.zip

    # 基于Spring、Struts和Hibernate的OA系统 ## 项目简介 本项目是一个基于Spring、Struts和Hibernate框架的办公自动化(OA)系统。该系统主要用于企业内部的日常办公管理,包括用户登录、组织管理、权限管理等功能。系统前端使用现成的模板和JavaScript、jQuery技术,后端通过Struts、Hibernate和Spring框架实现业务逻辑和数据持久化。 ## 项目的主要特性和功能 ### 登录模块 防止多设备登录系统能够检测到同一账号在不同设备上的登录情况,并在检测到异地登录时通知用户并强制下线。 WebSocket支持使用WebSocket技术实现实时通知功能。 ### 组织管理模块 部门管理支持部门的增删改查操作,包括查看部门信息、职位信息和员工数量。 用户管理支持用户的增删改查操作,包括指定用户所在部门、职位和角色。 角色管理支持角色的增删改查操作,包括查看角色权限和修改角色权限。

    基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)

    基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高

    open3d python 给点云每个点设置不同的颜色

    open3d python 给点云每个点设置不同的颜色

    【电磁】基于matlab具有Mur吸收边界的区域的二维FDTD【含Matlab源码 9136期】.mp4

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    HengCe-18900-2024-2030中国室内木门市场现状研究分析与发展前景预测报告-样本.docx

    HengCe-18900-2024-2030中国室内木门市场现状研究分析与发展前景预测报告-样本.docx

    (源码)基于ASP.NET Web API的供应链管理系统.zip

    # 基于ASP.NET Web API的供应链管理系统 ## 项目简介 供应链管理系统(SCM)是一个基于ASP.NET Web API框架开发的企业级应用,旨在帮助企业高效管理供应链中的各个环节。系统涵盖了供应商管理、采购管理、库存管理、订单管理等多个模块,通过API接口实现数据的增删改查操作,确保供应链的顺畅运作。 ## 项目的主要特性和功能 1. 供应商管理 供应商信息的增删改查操作。 供应商联系人管理。 供应商评级和分类管理。 2. 采购管理 采购订单的创建、编辑和删除。 采购产品的状态管理。 采购合同的生成和管理。 3. 库存管理 库存产品的入库和出库管理。 库存状态的实时监控。 4. 订单管理 订单的创建、编辑和删除。 订单状态的跟踪和管理。 5. 用户管理 用户登录和权限管理。 用户角色的分配和管理。

    基于SpringBoot的“学生考勤管理系统”的设计与实现(源码+数据库+文档+PPT).zip

    系统主要包括首页,个人中心,学生管理,教师管理,班级信息管理,课程信息管理,签到信息管理,考勤信息管理,请假信息管理,考勤统计管理等功能模块。

    维特协议标准精度示例程序c.zip

    c语言

    DICOM文件+DX放射平片-数字X射线图像DICOM测试文件

    DICOM文件+DX放射平片—数字X射线图像DICOM测试文件,文件为.dcm类型DICOM图像文件文件,仅供需要了解DICOM或相关DICOM开发的技术人员当作测试数据或研究使用,请勿用于非法用途。

    C#ASP.NET仓储管理系统源码数据库 SQL2008源码类型 WebForm

    ASP.NET仓储管理系统源码 一、 程序说明 该程序大部分使用于生产制造厂,其中结合了制造厂的采购,销售,生产等. 开源部分是仓库系统后台管理系 统, 在给客户实施的过程中利用到了很多硬件设备, 设计到Wince系统,Android系统等PDA设备,各种打印 机,条码打印机,感应设备等,而且这些可能在整个项目中占据主导,而后台管理系统只是辅助作用的。 该程序使用的.NET MVC开发,大量使用到了jQuery,以及Bootstrap。 数据库使用了SQL Server.

    【小程序毕业设计】面向文艺影视社群的微信小程序源码(完整前后端+mysql+说明文档).zip

    环境说明: 开发语言:Java/php JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea 小程序框架:uniapp/原生小程序 开发工具:HBuilder X/微信开发者

    Skia-macOS-Release-arm64.zip

    Skia-macOS-Release-arm64.zip aseprite 安装所需依赖安装包

    中国品牌日研究特辑-数字经济时代下中国品牌高质量发展之用户趋势.pdf

    中国品牌日研究特辑-数字经济时代下中国品牌高质量发展之用户趋势.pdf

    生成xcinsphfs0exefsromfscertifateticket转储从任天堂Switch游戏卡和安装的SDe.zip

    c语言

    一个基于qt开发的包含各种基础图像处理技术的桌面应用,图像处理算法基于halcon,有直接调用halcon脚本和执行halcon

    一个基于qt开发的包含各种基础图像处理技术的桌面应用,图像处理算法基于halcon,有直接调用halcon脚本和执行halcon C++代码方式。 导入图片,预处理,滤波,边缘检测,阈值分割,形态学变换,图像增强,图像变换,

    【9312】基于Springboot+vue的精品水果线上销售网站的设计与实现.zip

    技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!

    C#固定资产管理系统源码(带条码打印)数据库 SQL2008源码类型 WinForm

    固定资产管理系统源码(带条码打印) 功能介绍 1.基本信息管理:包括资产分类,基本资料,资产编号规则,保存列间距和选择资产显示列等功能; 2.固定资产管理:包括资产增加,资产更新,资产删除,资产清理,资产清理查询和资产折旧核算 3.数据维护管理:包系统数据初始化,系统数据备份/恢复等功能; 4.系统维护管理:包括本单位信息和操作员管理等功能; 5.系统辅助工具:包括计算器和记事本等功能; 6.条码打印:对条码进行打印等功能;

    【Unity车辆控制插件】Realistic Car Controller轻松创建逼真的汽车模拟或赛车游戏

    文件名:Realistic Car Controller v3.95.unitypackage Realistic Car Controller 是一款在 Unity 中用于实现高度真实感的车辆控制和物理效果的插件。它提供了一整套车轮物理、动力学、碰撞检测以及其他重要功能,能够帮助开发者轻松创建逼真的汽车模拟或赛车游戏。以下是该插件的一些主要特点和功能: 主要特点: 真实的物理模拟: 提供高度精确的车轮物理,能够模拟真实的轮胎与地面之间的互动。 支持复杂的悬挂系统,可以根据地形变化调整汽车的行驶方式。 引擎、转向、刹车和加速等系统都基于真实物理算法,提供更真实的驾驶体验。 多种驾驶模式: 提供不同的控制方式,适合不同类型的游戏。包括传统的赛车游戏控制、模拟驾驶以及更轻松的街机式驾驶控制。 支持手动和自动变速器,用户可以自由设置。 高级车体控制: 支持不同类型的汽车(如运动型、SUV、卡车等)定制,可以调整每辆车的重量、引擎力量、车轮配置等参数。 车辆能够根据不同的地面情况(如草地、雪地、泥地等)表现出不同的牵引力和滑移效果。 细致的视觉效果: 支持实时反射..

    CrystalDiskInfo9-4-4.exe

    CrystalDiskInfo CrystalDiskInfo9_4_4.exe 监测查看硬盘健康状况 各类硬盘均可 仅适用于Windows

Global site tag (gtag.js) - Google Analytics