World of PERL
1
Outline
•Language History•Language Basics•Regular Expression•Multi-Processing•Multi-Threading
•CPAN: gearman/memcached•Network
•
Web Development
2
The top three people in hacker demigods and open source community:
Top1 . Linus Torvalds => Linux Kernel
3
The top three people in hacker demigods and open source community:
Top2 . Richard Stallman => GNU / FSF
4
The top three people in hacker demigods and open source community:
Top3 . Larry Wall => PERL
5
Perl概述
•Practical Extraction and Report Language•1987年12月,Perl Version 1 问世
•1994年10月,Perl经历了历史上第一次重大革新——Perl5发布。Perl5是一个完全重写的版本,它的到来甚至连当时很火的《The Economist》都做了报道。从此,在Perl历史上,Perl5开始了长达16年的统治(最新5.12) •被誉为“一种拥有各种语言功能的梦幻脚本”、“Unix 中的王牌工具”
6
Perl最擅长做什么
•Text Processing•Regular Expression•Network Programming•System Administration
7
与Python比,Perl不适合
•Win32 GUI
•Python强制程序员严格排版,语法严谨清晰•Perl赋予程序员最大程度的自由,语法松散晦涩,但是“Ugly or elegant, it‘s in your hands, not Perl.”
•过于灵活,同样功能,数十种写法
8
Perl口号
•There’s more than one way to do it.
9
Who Using Perl
10
Who Using Perl
•人类整组基因工程的DNA排序及计划管理•Perl能实现许多UNIX的公共系统工具的功能(提示:如果你正在学或必须学awk, sed, grep和tr,我建议你考虑Perl。所有的功能,统一的语法,相信你将永远不会因为它的性能发展太快而不适应它。)•Perl = awk+ sed+ grep+ shell
11
引例
12
1. Shuffle CoNLLsents
13
2. Array’s hash’s hash
14
Language Basics
(C语法风格给我们温馨的感觉))
(5—10分钟)
(寒冷的冬季它让我们心坎暖暖的15
基本类型和趣味符-1
•$ => int, short, long, double, char, string
•@ => vector •% => hashmap •\\•$a = 11 $a = “ab\\nc” $a = 8.6 •@arr = (1, 2, 3, 4) @arr = 1..100 $arr[0] •%hash = @arr %hash = (1=>’a’, 2=>’b’) $arr,1- •$ref = \\@arr$ref = \\%hash $ref = \\$a•$ref = *1,2+ $ref = ,1,’a’,2,’b’-=> & 16 基本类型和趣味符-2 •数组@arr = (1, 2, 3) •访问第一个元素$arr[0] [0]•散列%hash = (a,1,b,2) •访问key为a的value: $hash{a} {a} 17 基本类型和趣味符-3 •标量(数组引用)$scalar = [1, 2, 3] •访问第一个元素$scalar->[0]•还原数组@arr = @{ $scalar } •标量(散列引用)$scalar = {a, 1, b, 2} •访问key为a的value: $scalar->{a}•还原散列%hash = %{ $scalar} 18 变量作用域 •my –{ my $str; } –作用域在该语句出现处开始,一直到•our (default) –全局变量 –可以看成c++,java中的static •local –略 {}结束 19 无极生太极,太极生两仪… •数组和散列的嵌套组合可实现任意复杂DS•这个DS可以看做是C++中的struct或class –数组的数组[ [] ] •即二维数组 –数组的散列{ [] } •Hashmap, 一个key对应一个vector –散列的数组[ {} ] •Vector, 每个元素是hashmap –散列的散列{ {} } •Hashmap,一个key对应一个hashmap 20 控制流-选择 21 控制流-循环 注意:除了这里,其他语句的{}不可少 22 操作符 •C语言中所有操作符(除指针&,*)•指数运算:2**3=8 •字符串拼接:‘a’ . ’b’, ‘a’ x10 •绑定: =~, !~ (用于正则)•包含: $a ~~ @array•范围: 1..100 • 逻辑:not and or xor 23 操作符-文件测试 24 操作符-关系 25 操作符-相等 26 HERE 文档 27 输入输出 28 语句环境 •你是爸爸的儿子/女儿,老师的学生,处在不同环境中,你有不同的身份和任务。•Perl中的变量在不同的语句环境中有不同的值和类型,这也是他被称为post-modern programming language的直接原因。 29 Magic Variable •print for @array; •凡是需要变量而没写的地方,默认$_•子程序的参数传递默认是@_ 30 •Perl究竟能赋予你多大程度的自由? 31 32 (5—10分钟) 33 Frequently-used 常用函数 34 常用函数 •sort LIST •默认string comparsion •reverse LIST 35 常用函数 •••• split /PATTERN/ split /PATTERN/, EXPR split /PATTERN/, EXPR, LIMIT例子: 36 数组常用函数 37 散列常用函数 38 散列常用操作 39 例子1 40 例子2 41 例子3 42 正则表达式一瞥 •Perl的正则表达式内嵌于语言本身,以操作符的形式提供,而不是库 •Statements 和Reg浑然天成,你中有我,我中有你,已经分不清了到底是在程序中写正则,还是在正则中写程序•没有match, replace函数 43 Match: m/ / 44 Substitution: s/ / / 45 46 47 48 Multi-Processing 多进程概要 •fork函数创建子进程 •子进程于fork处复制父进程,之后父子进程宏观上同时运行 •僵尸进程(zombie process)•进程间通信(IPC)的四种方式 49 fork函数 •一次调用,二次返回 –父进程返回子进程id;–子进程返回0; 50 zombie-僵尸进程 •Linux 使用进程表来管理进程 •每个进程都在进程表中占据一个位置 •当我们用fork 生成一个子进程,然后该子进程退出时,系统不会自动回收该子进程所占位置。此时虽然进程表中有这个子进程的信息,但实际上该子进程早已结束,于是这个进程就成了“僵尸进程” •僵尸进程虽然不占用系统资源,但是它会浪费进程表的位置。如果僵尸进程太多,有可能会导致不能创建新进程 51 生成一些“僵尸” 52 避免方法 53 IPC-进程间通信 •每个进程各自有不同的用户地址空间,任何一个进程的变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信 IPC method •File•Pipe •Shared Memory •Signal• Socket 55 signal 56 pipe 管道 •与socket不同,pipe只能用在同一台机器的不同进程之间,但效率更高 •调用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过参数传出给用户程序两个文件描述符 57 具体步骤 1. 父进程调用pipe开辟管道,得到两个文件描述符指向管道的两端。 2. 父进程调用fork创建子进程,那么子进程也有两个文件描述符指向同一管道。 3. 父进程关闭管道读端,子进程关闭管道写端。父进程可以往管道里写,子进程可以从管道里读,管道是用环形队列实现的,数据从写端流入从读端流出,这样就实现了进程间通信。 58 59 60 1+2+…10^7: time consuming •perl串行3.158s•perl并行2.317s•java 0.226 –0.4s•g++ 0.006 –0.11s•python 7.59s• perl3.158s 61 shm共享内存 •共享内存从字面意释就是多个进程可以把一段内存映射到自己的进程空间,以此来实现数据的共享以及传输,这也是所有进程间通信方式中最快的一种。 •在系统内核为一个进程分配内存地址时,通过分页机制可以让一个进程的物理地址不连续,同时也可以让一段内存同时分配给不同的进程。共享内存机制就是通过该原理来实现的。 •共享内存是存在于内核级别的一种资源,在shell中可以使用ipcs命令来查看当前系统IPC中的状态,在文件系统中/proc目录下有对其描述的相应文件。 62 shm共享内存 63 socket WebServer •多进程 •自适应负载•pipe• shm 65 66 Multi-threading threads •$thr= threads->create(FUNCTION, ARGS)•$thr->join()•$thr->detach()•threads->join()•threads->detach()• threads>self()->tid() 67 threads::shared 68 Thread::Semaphore 69 用信号量线程数量 70 多线程加法 71 生产者消费者模型 72 死锁 73 74 CPAN •如果有人问 •众多的脚本中为什么我选Perl•答案并且只能有一个 •那么,我会毫不犹豫地回答,因为 CPAN 75 76 77 78 79 Perl programming Authors Upload SErver 80 81 82 83 84 安装CPAN模块的步骤 •Linux && Win32 1.【cpan】进入cpanshell 2.【install Module_Name】开始安装 •Win32 (ActiveState Perl) 1.【ppm install Module_Name】2.【ppm uninstall Module_Name】 85 几个原则 •如果没有特殊原因,应尽量使用CPAN中的模块(尤其是加★的) •有人做过统计,CPAN已经完成了大多数人工作需要的90%,你需要做的,就是花10%的时间,使用这些模块的接口拼接出你需要的功能。 86 •use CPAN Module –gearman–memcached 87 use Gearman •通常,多语言多系统之间的集成是个大问题,一般来说,人们多半采用WebService,但不管采用何种风格的WebService,本身都有一定的复杂性。相比之下, gearman也能实现类似的作用,而且更简单易用 •一个分布式的分发任务的程序框架 •主要用来把任务转发给到其他机器或进程 •让程序实现并行工作、负载均衡和跨语言调用•与Hadoop相比,Gearman更偏向于任务分发功能,使用非常简单 88 How Does Gearman Work? 90 使用步骤1 •Start Servers –Gearmand –d –p 4730 91 使用步骤2 •Start Workers 92 使用步骤3 •Clients’ Invoke 93 use memcached •高性能的分布式内存缓存服务器 •一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性 •许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响 94 who use it •Facebook•YouTube•Mixi –日本最大的社交网站,全球排名42 –日本有9000万互联网用户,Mixi作为最大的SNS网站,有2100万用户,渗透率23%左右,而Facebook在日本仅有200万 •LiveJournal –SNS, 全球排名84 •Hatena –提供免费博客和相册 •Vox 95 96 97 分布式算法 •根据服务器台数的余数进行分散 •求得键的整数哈希值,再除以服务器台数,根据其余数来选择服务器 98 根据余数计算分散的缺点 •余数计算的方法简单,数据的分散性也相当优秀,但也有其缺点。 •当添加或移除服务器时,缓存重组的代价相当巨大。添加服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器,从而影响缓存的命中率。 99 100 Consistent Hashing 101 Consistent Hashing 102 memcached内存分配 103 使用Growth Factor进行调优 104 memcached例子 •见代码 105 Web Development 106 LWP::Simple 107 LWP::UserAgent 108 LWP::UserAgent 109 Web::Scraper ••••• 用于网页数据抽取不用写正则表达式 只用简单设置HTML、CSS选择子或XPath基于Dom模型,准确率100% (if htmlclean)简单、易上手 110 HTML/CSS Selector 111 XPath 112 例1: BaiduNews 113 CGI •步骤 –install Apache –install PerlDistribution –turn on the ‘pl’ tag in Apache’s conf 114 CGI 115 Ajax •\"Asynchronous JavaScript and XML\" •It's a term coined by Jesse James Garret in Ajax: A New Approach to Web Applications•Ajax techniques let you update parts of your web page without reloading the whole page from scratch. •Google Map, Google Suggest, Gmail 116 Ajax 117 classic steps ① ③ajaxengine receives JavaScript call ④ajaxengingsends request to server-side asynchronously ⑤ajaxengine receives data from server⑥ajaxengine set content.innerHTML 118 CGI::Ajax 119 总结 120 •喜欢一个人,不但要喜欢TA的优点,也要包容TA的缺点。对语言,也要有感情。•“用最适合的工具去做最适合的工作”应成为每个程序员的座佑铭。 Best Wishes ~_~ 121 •陈鑫•Homepage: http://ir.hit.edu.cn/~xchen•Email: cx3180@gmail.com• QQ: 49879745 122 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务