第一次接触Perl,还是2008年10月份的时候,当时因为项目重构,需要进行大量的文本操作,于是便拾起了以“文本操作为己任”的Perl语言。当然,带我入门的还是那本赫赫有名的The Llama  Book, 即<Learning Perl> 第四版

然而,由于主要是为了使用,所以只是快餐式的学习,并没有系统的去了解Perl,这几年来三三两两的也写了不少Perl脚本,但是对于Perl那些天书式的符号,还是颇有些头疼,经常,写到一半就得停下来去查一下某个奇怪的语法,或者奇特的符号,很是打断思路。社区对Perl有两种比较中肯的评价:一是Perl是Write-Only的编程语言;二是Perl学起来难,但一旦学会了,用起来就相当方便。 我想这两点其实都是基于一个事实,就是Perl里有太多奇怪的符号,而只有你对这些符号了若指掌了,你才能发挥Perl的最大效率 --- 所以,学习Perl就要像学习历史课本一样,靠的,就是背诵!

根据这两年的经验,整理了一下自己觉得用的比较多的一些符号,用法,以及函数,库之类的,这些都是很基本的,但是“背熟”了,对提高效率会很有帮助。

数据操作

  • $ - 声明与引用用一个scalar的变量
  • @ - 声明与引用一个list,但是当访问一个list的成员时,需使用$ListName[index]
  • % - 声明与引用一个hash表,但是当访问一个hash的成员时,需要使用$HashName{key}

特殊变量

  • $0 - 当前运行脚本的文件名
  • @ARGV - 当前运行脚本的命令行参数列表
  • $_ - 默认变量,如循环中的当前变量
  • @_ - 函数的输入参数列表
  • %ENV - 系统的环境变量
  • @INC - Perl的Include路径列表,我们可以往该列表中添加我们自己的目录来方便引用自定义的库
  • $! - 当前系统提示,错误信息
  • $^O - 操作系统的名字
  • STDIN,STDOUT,STDERR - 输入输出的默认句柄,可以作一定的自定义
  • => - 声明一个hash时可以用来明确的表示出key=>value的对应关系
  • $^I- 指定备份的文件的后缀名,如此,被修改的文件将会自动以该后缀名保存一个副本

特殊用法

  • &Sub - 调用一个函数,虽然Perl有些规则让你在某些时候可以省略这里的&符号,但是处于一致性考虑,所以自定义的函数的调用,我一律采用此种方式。
  • $# - 用来取得模个数组的最大index, 一般情况下,也可以用-1来表示最后一个元素的index的
  • qw() - 快速声明一个字符串数组,可以省略那些烦人的引号

正则表达式

  • $ < digit > - 获取被括号捕获的匹配
  • $`, $&, $' - 获取匹配的字符串,以及其前后两个部分
  • ^,$ - 字符串的始末位置,用作定位

常用函数

    • pop, push, shift, unshift, reverse - list的操作函数
    • keys,values, exists, each, delete - hash的操作函数
    • chomp, split, join, index, substr, sort - 字符串操作函数
    • sprintf,printf, print - 格式化输出函数
    • system, exec, `` - 系统命令调用函数
    • glob, unlink, mkdir, rmdir, rename,chmod,chown, open, close, opendir, closedir - 文件系统操作函数
    • stat, lstat,localtime,gmtime,utime - 文档属性,时间相关函数
    • hex, oct - 二进制,八进制,十六进制数转化成十进制的函数
    • grep, map - list高级操作函数
      这些函数的详细介绍,都可以通过命令:
1
perldoc -f functionname
    查到

常用库

    • File::Basename - 根据path获取文件名或者文件路径
    • File::Spec - 根据文件名与路径组合成全路经
    • File::Find - 递归遍历某个目录下所有文件
    • XML::Simple - 以一个复杂的结构来表示xml文件,使用起来相当方便
    • Time::HiRes - 经常用来计算一个操作所耗费的时间
    • Getopt::Long - 当脚本需要复杂的输入参数与选项时用到
    • Cwd - 拿到当前工作目录
    • IO::File - 文件操作
    • Win32 - 当需要调用一些Windows API时我会用它

像学历史课本一样学习Perl的更多相关文章

  1. 关于学习Perl

    Perl是一门很有用的语言,可以用它来做很多事.然而,它也仅是一门语言,掌握了Perl,你只是掌握了Computer领域的一小块知识.在学习Perl前,请明确你的学习目的,并采用正确的学习方法和资源. ...

  2. 【pwn】学pwn日记——栈学习(持续更新)

    [pwn]学pwn日记--栈学习(持续更新) 前言 从8.2开始系统性学习pwn,在此之前,学习了部分汇编指令以及32位c语言程序的堆栈图及函数调用. 学习视频链接:XMCVE 2020 CTF Pw ...

  3. Linux就该这么学--第五期 学习笔记

    第一节:基础 <Linux就该这么学>第二期视频 Linux就该这么学第5期第二节: ------------你的价值:你对公司做出的共享和你的不可替代性------------瑞尔系统R ...

  4. 第三周作业-课本&&视频学习

    <网络攻防技术与实践>第三周作业 Part I 寻找自己留在互联网上的足迹并消除隐私 1.1 google/baidu搜索自己的qq号 搜索结果如图,搜到的有用信息其实就是图上这么几条,能 ...

  5. 《手把手教你学C语言》学习笔记(2)---学习C语言的目标和方法

    一.学习C语言的目标主要是: 熟练掌握C语言的关键字,语法规则,程序控制等: 掌握基本的数据结构,数组.链表.栈和队列等: 掌握C语言中指针和内存.数组与指针.函数与指针.变量和指针.结构体和指针.硬 ...

  6. 《手把手教你学C语言》学习笔记(1)---C语言的特点

    学习C语言的原因,主要是需要使用C语言编程,我用故我学,应该是最主要的原因了. C语言的定位:C语言严格意义上只能算是中级语言,是面向过程编程语言的集大成者,虽然这种语言有很多的问题,但总体而言是瑕不 ...

  7. 下页小希学MVC5+EF6.2 学习记录三

      目的:1 学习mvc+ef 2  写下日记也是对自己的督促 期待已久的EF终于来了. 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型 ...

  8. 五分钟学Java:如何学习Java面试必考的JVM虚拟机

    原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java ...

  9. 五分钟学Java:如何学习Java面试必考的网络编程

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 简介 Java作为一门后端语言,对于网络编程的支持是必不可少的,但是,作为一个经常CRUD的Java工程师,很多时候都不 ...

随机推荐

  1. 触摸精灵lua脚本实现微信群加好友功能

    --此脚本针对iPhone5/5s --目前只实现一个屏幕微信群好友的添加,如果想添加更多好友, --需要划屏操作,执行划屏操作时建议循环滑动 function main() --获取屏幕的分辨率 w ...

  2. 260. Single Number III

    Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...

  3. boot/bootsect.S

    !! SYS_SIZE is the number of clicks (16 bytes) to be loaded.! 0x7F00 is 0x7F000 bytes = 508kB, more ...

  4. codeforces 192a

    link: http://codeforces.com/contest/330/problem/A brute force. /* ID: zypz4571 LANG: C++ TASK: 191a. ...

  5. JS初学之-选项卡(常见)

    思路:鼠标滑过的效果直接用a:hover实现的,比较简便,缺点是在IE下不兼容.   为每一个Li添加点击事件,将每一个li用自定义属性的方法与div相匹配,重点是在点击事件内,要先遍历每一个div, ...

  6. php部分---include()与require()的区别、empty()与isset is_null的区别与用法详解

    include()与require()的用途是完全一样的,不一定非得哪个放在最前面哪个放在中间.他们最根本的区别在于错误处理的方式不一样. 1.处理错误的方式: require()一个文件存在错误的话 ...

  7. TinyXML2读取和创建XML文件 分类: C/C++ 2015-03-14 13:29 94人阅读 评论(0) 收藏

    TinyXML2是simple.small.efficient C++ XML文件解析库!方便易于使用,是对TinyXML的升级改写!源码见本人上传到CSDN的TinyXML2.rar资源:http: ...

  8. C++实现水波纹、火焰和血浆效果

    点击这里查看原文 Code Project着火了! 整个工程有三个类,它们可以让你在图象上添加一些很酷的效果. 我把这些文件都放到我的代码压缩包里面了,并且做了一个小工程来让一些人使用起来更方便,但是 ...

  9. 恢复Ext3下被删除的文件(转)

    恢复Ext3下被删除的文件(转) 前言 下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件. 删除文件 假设我们有一个文件名叫 ‘test.txt’ $ls -il test.txt 1 ...

  10. QueryRunner使用

    在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿.为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,老佟给我们详尽介绍了一个简化JDBC操作的组件——D ...