Chinaunix

标题: 【专题交流】我今天又偷懒了 [打印本页]

作者: gsging    时间: 2007-03-28 09:12
标题: 【专题交流】我今天又偷懒了
能不能请大家说点自己用perl"偷懒"的实际例子.

[ 本帖最后由 gsging 于 2007-3-28 09:24 编辑 ]
作者: flw    时间: 2007-03-28 10:52
原帖由 gsging 于 2007-3-28 09:12 发表
能不能请大家说点自己用perl"偷懒"的实际例子.

这个想法很不错,我另开辟一项专题,希望能够有所积累。
作者: flw    时间: 2007-03-28 10:58
本帖定位:
大家在工作中碰到了什么小问题,本来可以用其它方法解决了,但是你用 Perl 解决了,节省了时间,提高了工作效率,那么请把该事件在这里做一个简单的描述。
注意:本帖侧重于展现 Perl 是如何帮助你工作的,因此不要在这里交流那些本来就应该用 Perl 去做的事情,比如你用 Perl 做了个 CGI。
作者: gsging    时间: 2007-03-28 11:20
原帖由 flw 于 2007-3-28 10:58 发表
本帖侧重于展现 Perl 是如何帮助你工作的,因此不要在这里交流那些本来就应该用 Perl 去做的事情


定位太准确了,我就是想知道这个问题.呵呵.
作者: 关中大侠    时间: 2007-03-28 11:45

本人系统管理员,写程序没天赋,所以什么方法最快解决问题用什么,发现perl最合适
最开始是用perl来管理网络设备,给交换机配置ACL,配置防火墙什么的,几千条没几分钟就搞定了,爽
作者: byosoku5cm    时间: 2007-03-28 12:39
本人Perl新手,开发主要是C/C++,不喜欢Amarok,用perl写了个从网上下歌词的脚本,加上FvwmScript,就可以在任务栏显示歌词了,虽然脚本写的很垃圾,但跑起来也没什么大问题。

如果用C/C++,就得写XMMS的插件了,还得写界面,头都大了。

发现perl不愧是胶水语言哈,libxmms, libmp3都有接口,各种类库支持都有,偷懒第一选择。
作者: 路小佳    时间: 2007-03-28 12:46
用来周末挂机。
周末一般都通宵上网, 有时提前上床后就需要设定自动关机时间。
1. 如果网断了就关机
2. bitcomet下载完了也要关机(bitcomet本身不提供这个选项)
3. 时间到了也要关。
网上的自动关机软件不能满足我的要求, 结果用Perl捣鼓了一会儿就好了。
作者: 战鹰    时间: 2007-03-28 12:58
大的就不说了,说说小的,偶有个DNS服务器要管,因为是策略式的(根据来访的IP自动分配网站的IP以适应电信和网通的线路),一旦策略设置错误那么可能分配出去的IP会访问的非常慢,于是作了一个程序查询Log当中的IP所属运营商,如果发现有错的自动生成相应的文件,我定期审核一下然后合并到配置文件当中就可以了
作者: 月魔    时间: 2007-03-30 17:50
你们都超强啊,我在想,怎么偷懒能把perl学会了
作者: doiob    时间: 2007-03-30 20:41
标题: 分析彩票数据,但从没中过:-(
曾经用perl编了几个cgi程序分析彩票数据玩,apache做服务器,浏览器显示结果。可惜没有分析出什么结果,其实也是个perl学习过程。我主要是在取数的方面偷了一小懒,以前都是用浏览器打开有关网页,比较现有数据看缺哪几期数据,然后一一复制、粘贴、整理、存盘,最后手工将数据文件发送到几个信箱。现在用perl编写了一个程序,这一切自动完成:抓取网页,判断缺几期数据,然后提取所需数据,进行整理,存盘,最后将数据文件发送到指定的几个信箱。

[ 本帖最后由 doiob 于 2007-3-30 20:47 编辑 ]
作者: whatmycool    时间: 2007-04-08 16:14
呵呵,不错
作者: bulletming    时间: 2007-04-09 12:30
1.最近作了一个Email日志分析系统,将日志分析后insert到oracle数据库,然后在interchange平台上,写一些网页展示出来,可以查询,图形(chartdirector)流量显示等
2.测试proxy的速度,每十分钟经过代理去取一次网页。出数据,生成图表。
作者: jetgm    时间: 2007-04-10 17:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: skyfish8u8    时间: 2007-04-29 11:11
自动化测试WLAN,晚上自己跑,早上来看测试报告。哈哈
作者: flw    时间: 2007-06-26 12:56
我给补充两个我自己亲身经历的例子。
工作中有什么烦人的事,需要重复劳动的地方,就可以考虑用 Perl 来做。
比如我有一回测试一个 SPF 服务,需要不断地重复以下过程:
1,从待测 IP 清单中拿出一个 IP 地址。
2,修改机器 A 的 IP 成为此 IP。
3,把机器 B (和机器 A 在一个网络里)的 IP 设置成和刚才那个 IP 在同一个网段的随便一个 IP。
4,在机器 A 上往机器 B 上发一份 email。(情况略有不同,但是先大概这么理解吧。)
5,看发信结果是能发过去,还是被拒绝。

那个 IP 清单很长,忘了是好几千还是好几万还是好几十万了,
反正手工一个一个做是不可能的,于是开始时抽样做了几个 IP,
后来嫌太麻烦,就用 Perl 写了一个脚本。
自动完成以上所有工作。

/path/to/ttt.pl ip.list | tee report.txt

若干小时之后只需要观察 report.txt 就可以了。
如果老板不是很黑的话,这几个小时期间就可以去喝茶了。

作者: flw    时间: 2007-06-26 12:56
再举一个例子,
我前阵子接手一个项目,典型的 C/S 结构 socket 程序,我调的是服务端,C 写的。原来的代码写的特别烂,我在调试的过程中需要反复地让配合我测试的另外一位同事发送某个请求以便跟踪程序、找到问题所在。但是因为客户端自身有一些业务上的限制导致操作起来并不是那么便利(比如每次都要重新输入很多资料、输入不完整、不合法还不行),我看到那位同事很辛苦,出于体谅到他的情绪,以及为大家节约时间的角度考虑,我就修改了一下服务端的代码,把收到的报文储存在一个临时文件中,并写了一套 Perl 脚本,show 03 就可以查看交易代码是 03 的那些报文(文件名),replay_last 03 重放最后一个 03 业务。replay /tmp/pkg/foo.dat 重放某个指定的业务,等等。

这样一来,每次他只需要告诉我他在哪个功能中发现了错误,我就 show xx 一下找到对应的文件名,
然后重复地 replay 这个报文,同时跟踪、修改、再跟踪服务端。等到改好之后,再让他试一下就行了。

至于选择 Perl 来写这些脚本而不是 C 或者别的东西,
是因为发送一个完整的请求包括了 Socket 操作、查找报文文件、XML 识别、压缩解压等操作,用 C 写起来可能就得不偿失了。

作者: pondka    时间: 2007-07-02 10:23
这个帖子好,顶上去,让大家都分享一下经验!
作者: apile    时间: 2007-07-02 13:18
1.最近写了个替代who的who.pl...因为单位内采用一种很特殊的方式登入AIX系统..
  先用同一个id进入aix..然後再提示LDAP的帐号密码..输入後..利用expect加上su -转换成别的id...
  也就是说大家都用A进入OS..但是完成LDAP输入後..变成自己个人的id.....
  这时候..用who..只会看到一堆A...看不到实际id...与姓名..
  所以结合ps -ef、who、cat /etc/passwd
  以pts为主..
  个这是个简单的who.pl....主要跟who一样...只是能尽快知道那个ip是那个id上来了...
   不然要知道那个人在那个pts..得要看很多地方才查得到...
output内容如下:
自己id    姓名    PTS    登入时间   登入IP
who大致内容一样..但是多了个姓名....
速度是我同事用shell script写的who.sh 两倍以上...

2.用perl写了个分析apache access_log的资料..避免自己写的 apache被人家恶意搞垮了...
  主要是分析某个IP一天之内access了几次..超过一千次的发Email通知..超过一万次的..
  早上来直接加入apache的 deny list中..

[ 本帖最后由 apile 于 2007-7-2 13:23 编辑 ]
作者: red999    时间: 2007-07-02 15:34
每个工作日都要填写日报,觉得这个剧麻烦,而且还老是忘记,于是前段时间学了perl之后,鼓捣了一个perl脚本,周一至周五自动登陆填写日报,真是爽,呵呵

[ 本帖最后由 red999 于 2007-7-2 15:35 编辑 ]
作者: flw    时间: 2007-07-02 15:49
原帖由 red999 于 2007-7-2 15:34 发表
每个工作日都要填写日报,觉得这个剧麻烦,而且还老是忘记,于是前段时间学了perl之后,鼓捣了一个perl脚本,周一至周五自动登陆填写日报,真是爽,呵呵

日报内容来自何方?
作者: 小公猫    时间: 2007-07-02 15:58
原帖由 flw 于 2007-7-2 15:49 发表

日报内容来自何方?


同问!
作者: doiob    时间: 2007-07-02 19:42
由于工作需要,月底要手工填制单据,数据是从内部管理系统里打印出来,填写n长的名字和n长的账号,再根据收费金额填上大写金额。过了月底,还要打印出上个月完整的数据,手工勾兑出上月底收费之后发生的数据,再手工填写单据收费补收。随着业务量的增加,对于我这个整天写不了几个字的人来说,无比痛苦。开始几个月还咬牙熬着,后来实在受不了了,赶紧用perl写了程序,现在需要我做的就是只剩下手工往打印机里送单据了,虽说没有完全摆脱手工,因为单据是单张固定格式的,也没有办法。但已经感觉比以前幸福多了,月底感觉轻松多了。虽说也可以用其他语言编写,但perl在读取不是很规则的数据方面,还是非常好用的。因为我的数据就是用复制粘贴到记事本里的,显示不是很规则,但perl的正则就有了用武之地了。
作者: gsging    时间: 2007-07-03 09:39
原帖由 flw 于 2007-7-2 15:49 发表

日报内容来自何方?


呵呵,我也写了一个每天自动提交日报的程序。
现在很多公司的日报就是个形式,比如我们公司,日报写什么没关系,不写就罚50块钱。
所以日报内容一年到头就是"coding"这几个字.
作者: intact    时间: 2007-07-03 10:27
看云霄阁的书,很多是图片链接,要看的话必须一个个打开,不爽!用perl写个脚本,自动下载所有图片,再集成到一个HTML文件中,这下可以慢慢看了。呵呵。
作者: lansos    时间: 2007-07-04 11:12
向网页提交表单
还有看谁还没提BR发信催他:)
还有用来merge/label文件,自动判断哪些需要merge

[ 本帖最后由 lansos 于 2007-7-4 11:20 编辑 ]
作者: Ksharp    时间: 2007-07-04 14:59
呵呵 现比而言我的就惭愧了,写了一些自动发布新程序的小程序,又避免了繁琐的修改又避免了出错,用着还是比较爽
作者: redspider    时间: 2007-07-04 17:30
原帖由 doiob 于 2007-3-30 20:41 发表
曾经用perl编了几个cgi程序分析彩票数据玩,apache做服务器,浏览器显示结果。可惜没有分析出什么结果,其实也是个perl学习过程。我主要是在取数的方面偷了一小懒,以前都是用浏览器打开有关网页,比较现有数据 ...

搞不懂为什么网上那么多分析彩票的程序,从理论上讲,分析彩票这件事本身就是错误的。
作者: cookis    时间: 2007-07-04 21:45
我用perl写过一个nightly-builds 脚本..每天自动编译整个系统..自动发布
作者: apile    时间: 2007-07-06 08:21
这两天用Perl写了个自动远端登入系统, deploy java project的程序...
主要是要连到主机去deploy程序..
动作
1.登入系统
2.执行 ant build java project
3.shutdown/startup tomcat
大概只写了一个早上...就完工....
这样子就不需要每次要deploy java project 就要登入一堆主机....
下一堆指令...
作者: red999    时间: 2007-07-06 08:45
原帖由 gsging 于 2007-7-3 09:39 发表


呵呵,我也写了一个每天自动提交日报的程序。
现在很多公司的日报就是个形式,比如我们公司,日报写什么没关系,不写就罚50块钱。
所以日报内容一年到头就是"coding"这几个字.



不错不错,其实就是个形式
作者: ubac    时间: 2007-07-06 09:54
公司一个项目要实现文件上传的功能,原来这部分是用C写的,但是上传速度特别慢,搞不好系统就挂掉了,
后来我用Perl将其改成CGI上传,上传速度明显提高了,而且系统稳定性也增强了
作者: flw    时间: 2007-07-06 09:56
原帖由 ubac 于 2007-7-6 09:54 发表
公司一个项目要实现文件上传的功能,原来这部分是用C写的,但是上传速度特别慢,搞不好系统就挂掉了,
后来我用Perl将其改成CGI上传,上传速度明显提高了,而且系统稳定性也增强了

不错,Perl 的特点之一就是有很多久经考验的 CPAN 模块。

[ 本帖最后由 flw 于 2007-7-6 11:57 编辑 ]
作者: NewCore    时间: 2007-07-07 13:16
标题: 好热闹,我也来说几句
1 搞嵌入式的,调试很麻烦, 在target上ftp或者telnet上host,在把编译好的程序down下来,然后在target上运行...如此重复的工作用perl很快就可以搞定,调试效率提高了不少。

2 工程里面有专门存放资源文件的目录,时间一长,目录里面垃圾很多,也无法追溯哪些是有用的,哪些已经没有用而可以rm掉的,同样用perl做了个脚本,输入有效的文件名列表,不在此列表内的通通干掉,以后维护起来方便自己也方便他人。

本人用perl主要也是做这些小东西,大了还是做不来,呵呵。
作者: Qiang    时间: 2007-07-10 13:14
不错的帖子。

目前大部分时间做网络开发,使用 CGI::Application, 和 3,4个 C::A 的插件。再加上 DBIx::Simple (DBI 的简单接口), Template-Toolkit 模板系统, Config::Tiny 配置模块,  CPAN 的好处就是在这里。我们有自己的工程目录结构, 把常用的这些模块和我们组开发的模块(都是纯 perl 模块 ) 放到工程目录里,然后每次做一个新工程就延续使用以前的,省了很多重复劳动,工程开发也提速很多。


其他常用 perl 的命令行来替代 sed, awk 的功能,导致我现在记不清楚那些工具的规则了。
作者: kq01    时间: 2007-08-16 12:04
呵呵,看来很多人都要写日报阿,我也是写了一个分析日报的工具,把日报的数据汇总。
不过居然有人自动来输入日报,这个从软件质量保证上面来看,SQA看来要小心了。
作者: suigetsui    时间: 2007-08-24 11:45
公司有个测试程序全部运行下来2个多小时,中间有几个地方停下来等用户输入,还要登陆两个服务器。用perl+expect模块模拟人工操作,下班后运行,第二天提交结果。
作者: jetico    时间: 2007-08-29 22:55
你们偷的这些懒用PHP能不能偷呢?
作者: flw    时间: 2007-08-29 23:00
原帖由 jetico 于 2007-8-29 22:55 发表
你们偷的这些懒用PHP能不能偷呢?

不懂 PHP,如果你懂的话不妨从第一帖开始用 PHP 做一遍。
作者: hmilymb    时间: 2007-08-30 04:29
几十个配置文件,每个文件中里面有许多ip和端口,由于网络更改了,许多ip和端口都变了。
网络部门那边给一ip更变文件,里面记录那个ip更变。

如果用手工一个一个改,既痛苦有不能保证是否遗漏和错误,怎么也得用2天,用per写了个小程序,先读ip更变文件,遍历并更改配置文件,又快又好,不用半个小时搞掂。

[ 本帖最后由 hmilymb 于 2007-8-30 04:38 编辑 ]
作者: mdsqeh    时间: 2007-09-01 23:08
楼上的写的太精彩了,虽然不懂PERL ,看了大家的介绍决定就学他了,顺便说一句 我是做网络维护的.
作者: xjtubaby    时间: 2007-09-13 20:24
楼上的兄弟们都写得太好了,值得借鉴阿,我也写过点小的,最近一个

由于测试需要,每天都需要测试新出的build,而且build文件很大,下载又慢,写了个perl程序,每天下班自动下载其最新的版本到本地,解压,修改配置文件,安装,第二天过来测试,节省了挺多时间的。:)
没用到太多的模块,看来要向前辈们学习啊!
作者: goride    时间: 2009-02-23 12:54
对楼上的诸多前辈真是佩服啊。
作者: longbow0    时间: 2009-02-23 17:13
佩服,学习中
作者: gdutllf2006    时间: 2009-06-02 14:05
准备学习中!
听说学perl使人变懒!
作者: xti9er    时间: 2009-06-02 14:54
工作中我也常用perl来做一些事情,自动化,降低人力成本。

工作中:
1、以前干工程,需要计算道路线路曲线坐标。通过perl编写的程序,只要输入初始参数,整条线路3公里逐个输出坐标,比人工计算即省时又省力,还不会出错。
2、现管理服务器时现,与nagios配合,间隔多久自动查询页面,返回的结果取需要关注的地方,按事件重要程度发mail通知。
这比盯着N多服务器省心很多。
还有很多工作中的应用不方便说了。

生活中:
1、炒股,自动收集整理我持有股票的涨跌并汇总,计算盈亏
2、翻译,通过google或本地词库翻译
3、炒黄金,提取黄金走势图
4、spider

网络安全方面 就更不必多说了,非常顺手

以上诸多工具都可以按需扩展功能

[ 本帖最后由 xti9er 于 2009-6-2 15:07 编辑 ]
作者: wxlfh    时间: 2009-06-02 14:58
单位年初都要造上一年的年报,于是就用Perl配合Win32::OLE模块自动生成了报表,我只要半小时,这还包括了数据准备,报表录入(年报系统是一个N老的系统,用Visual Foxpro编的,因为不熟悉系统,没敢自己写DBF文件),打印的时间。

想起以前我的前任要忙活一星期,我就情不自禁地笑了。

[ 本帖最后由 wxlfh 于 2009-6-2 14:59 编辑 ]
作者: ttcn    时间: 2009-10-13 20:59
1. 用perl生成设备config文件。 公司要deploy几十个设备,每个设备都要按照excel表格配置网络地址,用perl读取后直接生成

2.解析log,用perl分析日志,没用的信息统统滤掉,几百行的log大概留下十几行

3.用perl去下载国家地理杂志每日图片:公司里的电脑是24小时开着的,vista下设置一个计划任务,每天下载,积少成多
代码见:http://hi.baidu.com/seraphxby/bl ... cc18d4572c84a1.html
作者: black_fire    时间: 2009-10-28 17:39
从A服务器取到access.log, 同步到B服务器进行 awstats分析,

基本流程:
1. perl取到 A服务器sites下所有网站的access.log, 同步到B服务器(如有需要,自动创建相应该文件夹),  
2. 套用 lighttpd模板 修改lighttpd配置(一般是创建一个虚拟主机), 然后生成随机密码, 发送给sysadmin。
3. 流量统计的首页产生简报
作者: black_fire    时间: 2009-10-28 17:41
生成周报的那个我也有类似的想法, 不过还不成熟

周报由latex模块生成PDF文档, 然后发送邮件
周报内容是由sqlite3数据库里提取
作者: qiyanse    时间: 2009-10-28 18:14
标题: 回复 #10 doiob 的帖子
很有趣
作者: yz86yz    时间: 2009-10-29 22:37
顶下前辈的帖子

我是个新新新手,前些日子要写nagios监控配置文件 500多台设备啊。配置文件很多都是重复的 只是IP不同而已,于是捣鼓了一个脚本。直接把ip写到一个文件里面 就自动给我加好了配置文件 爽啊
作者: dahe_1984_cu    时间: 2009-10-30 15:15
用perl 写垃圾mail自动发
作者: jiannma    时间: 2010-11-29 17:22
本帖最后由 jiannma 于 2010-11-29 17:24 编辑

好贴  学习了

工作上我用 perl 解决了检测机器关闭,数据库检索 等等,觉得perl的确很强大
作者: linux_arm    时间: 2010-11-29 22:21

1、自动从baidu搜索下图片的脚本;
2、删除当前目录下所有的.svn目录(正在捣鼓……)
作者: changejun    时间: 2010-11-30 18:13
以前记得新浪有个活动,抢沙发拿奖品,貌似也没什么短信通知的方式。
偶就写了个perl的监测程序放我服务器,发现我关注的人更新了博客就短信通知我,可是...NND,还是抢不到沙发,肯定有鬼!不过。。。感谢perl
作者: skyhost    时间: 2011-01-18 15:08
回复 56# changejun


    你直接用perl抢沙发。
作者: amw749    时间: 2011-01-18 20:56
最近在学perl,各位前辈太厉害了~~~崇拜啊~
作者: hahalaka    时间: 2011-07-12 16:33
这个跳跃好多啊 08年就没有一个贴额,07直接就09了
作者: xiaomm250    时间: 2013-10-27 15:32
回复 7# 路小佳


    具体怎么弄代码关机呢?
作者: xiaomm250    时间: 2013-10-27 15:38
xti9er 发表于 2009-06-02 14:54
工作中我也常用perl来做一些事情,自动化,降低人力成本。

工作中:
生活中:
1、炒股,自动收集整理我持有股票的涨跌并汇总,计算盈亏
2、翻译,通过google或本地词库翻译
3、炒黄金,提取黄金走势图
4、spider

如何炒股呢?
如何翻译?
作者: 神之战戟    时间: 2013-11-25 19:17
回复 49# black_fire
这个好,我今天就在写怎么在服务器上抓取日志到本地呢,能指点下不?

   
作者: dqw233    时间: 2013-11-25 19:56
回复 62# 神之战戟


    ftp或者sftp连上去下载日志啊
作者: yakczh_cu    时间: 2013-11-25 23:23
最方便的就是
while(<DATA>){
..
}
__DATA__
作者: qq27898    时间: 2013-11-27 15:28
本人学C & java出身,现在系统管理员,学习perl主要是为了我们工作站的主程序的
运行流程,

学习的时候我偷懒了,明显是以能看懂别人的程序为目的

话说这帖子还不过期,?怎么被人顶上来了
作者: xiaomm250    时间: 2018-04-04 15:17
专业软件生产了大量的文本文件,
他们都是在打开软件,然后修改文本里面的数据,
而我呢?
用perl一下子读取所有的文本,
然后循环正则修改文本,
花半天写个脚本(水平差,不经常用,所以半天才写一个几十行的程序)
然后鼠标双击下脚本,替换就完成了.
我不得不佩服我自己.

作者: xiaomm250    时间: 2018-04-04 15:24
专业软件生产的大量文本文件,然后在CAD里面出图,
他们都是一次读取一个文本出一张CAD图,
有很多文本文件需要读取,因此他们都是一张图一张图读取的,
人工这样生成图,累死人了

而我呢,用perl脚本把所有的文本合并在一起,
合并的时候,利用正则对每个文本做修改,删除增加一些内容,
这样合并后就是一个大的文本文件,
然后用CAD读取大文本,然后自动出图,图在CAD
中规则的排列,哈哈哈,我自己都嫉妒我自己.

要完成这个任务,必须懂perl以及必须懂CAD脚本,
周围只有我懂,哈哈哈,嫉妒我自己

作者: xiaomm250    时间: 2020-01-07 10:48
需要用AutoCAD批量插入块,
只会scr脚本,由于图块名称不同,插入点坐标不同,
用perl生成scr脚本,
然后我就能批量插入块了!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2