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

[经验分享] [转]Perl学习笔记

[复制链接]

尚未签到

发表于 2015-12-26 10:15:15 | 显示全部楼层 |阅读模式
  本文章转载自:扶凯[http://www.php-oa.com]
  本文原始链接: http://www.php-oa.com/2008/11/15/perl-note.html
  符号   
方括号表示多重性
  好用的模块
    面向对象
  Moose   
MooseX     
Mouse     
Moo     
Mo  # 轻量     
Class::Struct     
Class::Accessor     
Class::Accessor::Fast # 转换类的属性变成方法,可以方便的操作     
Class::Std Class::MethodMaker
  语法解析
  Parse::RecDescent (不推荐,太慢)   
Parse::Yapp Parse::Eyapp     
perl-byacc
  HTML 信息提取
  Web::Scraper # 最好的网页分析模块了,使用的 XPath HTML::TreeBuilder HTML::TreeBuilder::XPath   
WWW::Mechanize
  进程管理
  Parallel::Prefork   
Parallel::ForkManager
  开发调试
  local::lib   
PAR::Packer     
Perl::Tidy     
Smart::Comments # 非常方便的做 debug 和进度条打印的工具 函数和变量操作     
Hash::MultiValue   #一个 hash 可以有多个值     
List::Util              # 最好的列表操作,大部分是由 c 写的.性能非常好.     
# 常用导出的子函数有 max,maxstr,sum,reduce(列表归并),first(判断元素匹配)     
List::MoreUtils # 和上面一样,加了几个其它的功能,     
# 常用导出的子函数有 any,all,none notall,pairwise(同步二个列表操作),eacg_array(同时操作三个以上列表),mesh(数组合并)     
Memoize # 给函数做 Cache 的,如果函数的返回值非常多变,可以使用这个模块加快速度     
Devel::Size  # 变量内存查看
  文件读写操作
  File::Slurp 更加方便的读写文件   
Directory::Queue::Simple 给文件做成队列使用
  排序
  Sort::Fields # 按一定的分格符排序
  其它
  Number::Bytes::Human # 转换字节之类到人类比较可读的大小
  Perl的图形界面程序(Gtk2,TK)
    gmusicbrowser   mp3播放器   
PAC Manager     替换 SecureCRT/Putty 的终端,界面还需要完善     
ploader         一个相册管理和上传软件
  Perl 的线程函数
  Perl线程管理
    1
  2
  3
  4
  5
  6
  threads->create()     # 创建子进程,第一个参数是子函数,第二个参数是传给子函数的参数
  threads->join;        # 等子线程结束,取得子线程的返回值.
  threads->is_joinable; # 配合上面用,看看子线程是否运行完了.
  threads->detach;      # 分离子线程,这样父进程不在对这个子进程有责任了,当然也不能 join 了.
  threads->tid();       # 取得当前线程的线程 ID,和进程一样也有 ID ,用来标识每个线程.
  lock($variable)       # 锁定一个标量,数组,hash.这个锁定会直到锁定他的线程超出范围.
  Perl线程信号
    1
  2
  3
  4
  5
  cond_wait($variable)      # 在这个$variable 上等待
  cond_signal($variable)    # 给这个变量发一个信号
  # 让在这个变量(指使用了 cond_wait 的线程)上等待的线程启动,多个进程只会有一个启动.
  cond_broadcast($variable)
  # 和上面一样,但会唤醒所人有线程.每个线程都会接着运行 cond_wait() 之后的代码.
  Perl 中模块的安装方法
    其它所有方法都是过时的,请使用 CPANM 来安装:   
使用CPANMinus 来安装Perl 模块
  Perldoc 的使用方法
    查看模块文档 perldoc :
  1
  perldoc Module::Name
  查找 FQA 的文档:
  1
  2
  perldoc -q shuffle
  # 配合 -f 选项,可以见到标题中含有相关文字的问题, -q 也支持正则
  使用 perldoc 生成 html 来查看:
  1
  2
  perldoc -oHTML -dfilename.html -q "Perl ?6"
  # -o 是用来指定输出的格式,-d 指定名字
  查看 Perl 模块安装的位置(单行命令简单版本)
  1
  2
  perldoc -l module_name
  perl -Mmodule_name   -e'print $_ . " => " . $INC{$_} . "\n" for keys %INC'
  查询模块是否安装,和安装的位置
  1
  perldoc -lm module_name
  直接浏览代码
  1
  perldoc -m YAML
  在线的本地 Perl 文档     
直接安装 Pod::Webserver 的模块就行了,这个可能给你安装的模块都以 pod 显示出来.
  1
  cpanm Pod::Webserver
  直接使用 podwebserver 的命令就能启动,默认是使用的 8020 的端口来显示,给本地安装好的模块都会正常的显示出来.可以用 -H 来指定主机名和 -p 来指定端口.   
建议给 firefox 直接使用下面的命令来加速打开和启用
  1
  2
  3
  podwebserver &
  sleep 2
  firefox -remote 'openurl(http://localhost:8020/, new-tab)'
  Perl 中的 Vim 的配置
    在写  Perl 的人中,使用 Vim 的人是最多的,这一定是神器.除了常用的视图模式一定要会使用和常用的快捷键外,有一些对 Perl 的小技巧.比如使用 Ctrl+N 来自动完成 Perl 的标识符.   
不过有个问题,在 Perl 中模块的名字,常常使用 :: 这个冒号来做模块区分.但 Vim 并不认识,所以需要在 .vimrc 中加入如下:
  1
  set iskeyword+=:
  上面这个是在关键字在增量加入一个 : 来做关键字,这样可以直接使用 Ctrl+N 来补全模块名.
       Perl 模块相关使用

    查看模块是否安装(简单命令版本):
  1
  $ perl -MModule::Name -e 0
  查看机器上都安装了哪些模块:
  1
  $ perl -MExtUtils::Installed -le 'print foreach ExtUtils::Installed->new->modules'
  看 Perl 内置安装了哪些模块:
  1
  perl -MModule::CoreList -le 'print foreach Module::CoreList::find_modules'
  如何才能知道自己装了哪些 PERL 的模块(单行命令简单版本)?
  1
  $ find `perl -e 'print "@INC"'` -name '*.pm' -print
  查询当前使用的模块的版本
  1
  $ perl -Mmodule_naem -e 'print $module_name::VERSION;'
  给Perl打包成一个执行文件的方法
  (1.安装使用 PAR::Packer
    1
  # cpanm PAR::Packer
  01
  02
  03
  04
  05
  06
  07
  08
  09
  10
  11
  12
  13
  # 使用下面的命令就可以打包了
  pp -c -o Get   Get.pl
  #启动过滤器,来保护自己的 perl 程序
  $pp -f Bleach -o hello hello.pl
  或者
  $pp -f Bytecode -o hello hello.pl
  #打包成.par
  #不包含核心模块:
  $pp -p -o script.par script.pl
  #包含核心模块:
  $pp -B -p -o script.par script.pl
  Bleach过滤器是PAR自己实现的,而Bytecode这种过滤方式是Perl的标准格式(需要Perl 5.8.1以上版本支持)
  (2 出了问题,怎么查
  1
  $ scandeps.pl -V -e 'use YAML;'
  可以查出所有的包的依关系
  (3 Floating point exception
  大多是因为 GCC 的版本不一样,建议相同的操作系统和位数
  命名规范
    常量: 大写   
类名: 开头大写     
内部特殊子例程: 大写     
内部特殊变量: 大写     
普通变量: 小写     
普通子例程: 小写
  perl命令行接口
    1
  2
  3
  4
  5
  6
  # perl -nale
  -0 给记录符分隔符($/)指定为一个八进制.
  -a 打开自动分割模式(和-n ,-p 一起才有效).
  -e 输入多行,使用后不在从参数列表寻找等程序的文件名
  -n 让你的脚本 周围围绕循环,也就是讲给脚本中的line当作一个循环体
  Perl的特殊符号
    趣味符   
$        标量     
@       数组[给值时使用=>,记得不要和引用时的->混了]     
%       散列{hash}     
&        子例程,子函数     
*         typeglob     
$x{}   x名字前面是美元符号($),后面是花括号({}),则其为 hash 元素     
$!      系统产生的一些可读的信息,也可能是出错的信息     
$_     子函数参数变量自己本身     
<>    数据输入.如果没有指定文件名,则其从标准输入流中自动打开和关闭一系列文件进行读入
  erl默认的内部变量
  $- 当前页可打印的行数,属于Perl格式系统的一部分   
$! 根据上下文内容返回错误号或者错误串     
$” 列表分隔符     
$# 打印数字时默认的数字输出格式     
$$ Perl解释器的进程ID     
$% 当前输出通道的当前页号     
$& 与上个格式匹配的字符串     
$( 当前进程的组ID     
$) 当前进程的有效组ID     
$* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之.     
$, 当前输出字段分隔符     
$. 上次阅读的文件的当前输入行号     
$/ 当前输入记录分隔符,默认情况是新行     
$: 字符设置,此后的字符串将被分开,以填充连续的字段.     
$; 在仿真多维数组时使用的分隔符.     
$? 返回上一个外部命令的状态     
$@ Perl解释器从eval语句返回的错误消息     
$[ 数组中第一个元素的索引号     
$\ 当前输出记录的分隔符     
$] Perl解释器的子版本号     
$^ 当前通道最上面的页面输出格式名字     
$^A 打印前用于保存格式化数据的变量     
$^D调试标志的值     
$^E在非UNIX环境中的操作系统扩展错误信息     
$^F最大的文件捆述符数值     
$^H由编译器激活的语法检查状态     
$^I内置控制编辑器的值     
$^L发送到输出通道的走纸换页符     
$^M备用内存池的大小     
$^O操作系统名     
$^P指定当前调试值的内部变量     
$^R正则表达式块的上次求值结果     
$^S当前解释器状态     
$^T从新世纪开始算起,脚步本以秒计算的开始运行的时间     
$^W警告开关的当前值     
$^X Perl二进制可执行代码的名字     
$_ 默认的输入/输出和格式匹配空间     
$| 控制对当前选择的输出文件句柄的缓冲     
$~ 当前报告格式的名字     
$` 在上个格式匹配信息前的字符串     
$’ 在上个格式匹配信息后的字符串     
$+ 与上个正则表达式搜索格式匹配的最后一个括号     
$< 当前执行解释器的用户的真实ID     
$<digits>含有与上个匹配正则表达式对应括号结果     
$= 当前页面可打印行的数目     
$> 当前进程的有效用户ID     
包含正在执行的脚本的文件名     
$ ARGV 从默认的文件句柄中读取时的当前文件名     
%ENV 环境变量列表     
%INC 通过do或require包含的文件列表     
%SIG 信号列表及其处理方式     
@_ 传给子程序的参数列表     
@ARGV 传给脚本的命令行参数列表     
@INC 在导入模块时需要搜索的目录列表
  q 相当一个单引号,quote的缩写   
qq 相当一个双引号,quote quote的缩写     
qr 正规表达式.quote regex的缩写     
qw 单词表,quote word的缩写,qw($opt_h $opt_v)     
qx 执行外部程序,相当反引号

运维网声明 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-156457-1-1.html 上篇帖子: 如何在Eclipse中运行Perl程序 下篇帖子: perl shell脚本互调
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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