如何perl编写日志分析脚本简单的Perl模块

perl模块推荐18-图形界面编程利器Tk摘要事件驱动编程是编程中的一种模式,区别于顺序执行。监控事件,如果事件发生,则触发函数。而GUI编程非常有利于帮助大家理解事件编程。程序员要不要写图形界面,我认为是会写简单界面,没必要追求特效。而Tk作为一个经典的GUI库,具有学习简单,代码少,使用方便,界面简单简洁等特点,非常适用于行业软件的开发。Tk 的安装一个网友,装了好几天的Tk,没有安装上。作为一个经典模块,会有这样的问题实在可惜。 所有的模块都不推荐解压+拷贝的安装模式,这不能解决含c代码的模块以及模块的依赖性问题。 我推荐ppm+cpanm 这2种方式,如果安装不上,我就认为这个模块的作者不够负责,前提是你要配置好这2个环境。 如果懒得配置环境,推荐使用草莓Strawberry Perl ,自带cpanm.cpanm Tk 就可以安装成功。应用帮花瓣下载,添加一个简单的界面。 界面如下,代码!perl&-w&use&&use&Encode&qw(decode&encode);use&Tk;&my&$mainwin=new&MainW$mainwin-&title("HUABAN&DOWNLOADER");&&在mainwin上添加一个Frame1&my&$board_idF=$mainwin-&Frame();$board_idF-&pack(-expand=&1,-fill=&"both",-side=&"top");在Frame1&上添加一个label&my&$board_idL=$board_idF-&Label(-text=&"The&board&id:",-width=&50,-anchor=&'w');$board_idL-&pack(-side=&"left");在Frame1&上添加一个文本框Entry&my&$id_VAR=;my&$id_Ent=$board_idF-&Entry(-textvariable=&\$id_VAR);$id_Ent-&pack(-side=&'left');&&在mainwin上增加一个Frame&,存放下载图片数目&my&$num_F=$mainwin-&Frame();$num_F-&pack(-expand=&1,-fill=&'both',-side=&'top');my&$num_VAR=200;&$num_F-&Label(-text=&"number&of&photos&to&downloaded:",-width=&50,-anchor=&'w')-&pack(-side=&'left');my&$num_Ent=$num_F-&Entry(-textvariable=&\$num_VAR);$num_Ent-&pack(-side=&'left');&&&在mainwin上增加Frame2&my&$dir_F=$mainwin-&Frame();$dir_F-&pack(-expand=&1,-fill=&"both",-side=&"top");在Frame2&增加一个Label&$dir_F-&Label(-text=&"Output&Dictory:",-width=&50,-anchor=&'w')-&pack(-side=&'left');Frame2&增加一个Button&my&$dir="";$dir_F-&Button(-text=&"browse...",-width=&15,&-command=&sub&{&selectdic})-&pack(-side=&'left');Frame2&增加一个Label&my&$dirL=$dir_F-&Label(-text=&"No&dictory&Selected.");$dirL-&pack(-side=&'left');&$mainwin-&Button(-text=&"Download",-command=&sub{&&download($id_VAR,$num_VAR,$dirL-&cget('-text'))&})-&pack(-side=&'top');在mainwin上增加一个bottomF,CONTACT&my&$buttonF=$mainwin-&Frame();$buttonF-&pack(-expand=&1,-fill=&"both",-side=&"top");&&$buttonF-&Label(-text=&"contact:&perlcoder&weixin&gongzhonghao")-&pack(-side=&'left');sub&selectdic&{&&&$dir&=&$mainwin-&chooseDirectory();&&&&&if(defined&$dir)&&&&{&&&&&&&$dirL-&configure(-text=&$dir)&&&&&&&&}&&}&sub&download&{&my&($board_id,$num,$directory)=@_;&print&"$directory\n"&x100;&&&use&Mojo::UserA&use&Mojo::UserAgent::CookieJmy&$ua&=&Mojo::UserAgent-&new();my&$browser='Mozilla/5.0&(Windows&NT&6.1)&AppleWebKit/537.36&(KHTML,&like&Gecko)&Maxthon/4.4.2.2000&Chrome/30.0.&Safari/537.36';&$ua-&transactor-&name($browser);my&$cookie_jar&=&$ua-&cookie_&$ua&=&$ua-&cookie_jar(Mojo::UserAgent::CookieJar-&new);&my&$num_pic=0;&my&$starturl='/boards/'.$board_id;my&$body;my&$jsonbody;my&($pin_id,$key);my&($pngurl,$pngfile);my&$baseurl='http://hbimg./';while(1){&&&&&&$body=$ua-&get($starturl)-&res-&&&&&while($body=~/"pin_id":(\d+),.*?"key":"(\S+?)",/msg)&&&&{&&&&&&&&&&&($pin_id,$key)=($1,$2);&&&&&&&&&&&print&$pin_id,"\n";&&&&&&&&&&$pngurl=$baseurl.$key.'_fw658';print&"pngurl:&$pngurl\n";&&&&&&&&&&&&&&&&&&&&$pngfile=$pin_id.'.jpg';&&&&&&&&&&if($directory=~/No&directory/)&&&&&&&&&&{&&&&&&&&&&&&&}&&&&&&&&&&else&&&&&&&&&&{&&&&&&&&&&&&&$pngfile=$directory.'/'.$pngfile;&&&&&&&&&&&}&&$pngfile=$directory?$pngfile:$directory.'/'.$&&&&&&&&&&&print&"$pngfile\n";&&&&&&&&&&$ua-&get($pngurl)-&res-&content-&asset-&move_to($pngfile);&&&&&&&&&&$num_pic++;&&&&&&&&&&if($num_pic&200)&&&&&&&&&&{&&&&&&&&&&&&&print&"you&have&download&200&Photos\n";&&&&&&&&&&&&last;&&&&&&&&&&&&&&&&&&&&&}&&&&&}&&&&if($starturl=~/limit/)&&&&{&&&&&&&&&$starturl=~s/max=\d+/max=$pin_id/;&&&&}&&&&else&&&&{&&&$starturl.='/?isiv0rfd&max=&limit=20&wfl=1';&&&$starturl=~s/max=\d+/max=$pin_id/;&&&}print&$starturl,"\n";&&&&&&$ua&=&$ua-&cookie_jar(Mojo::UserAgent::CookieJar-&new);&&&&&&if($num_pic&$num)&&&&{&&&&&&&print&"you&have&download&200&Photos\n";&&&&&&&last;&&&&&&&&}}&}&让所有的widget&进入事件循环中,等待触发&MainL我的学习历程我先学习了几年perl,然后学习了pyhon的tkinter,语言都是想通的。深入了一门语言,再去学其他语言就会轻松很多, 熟悉了一个模块的使用理念,不管该模块在哪个语言中,你都能很快掌握。补充事件编程。我之前介绍过一个模块Mojo::EventEmitter,参见历史消息花瓣爬虫的核心代码介绍,参见历史消息书读百遍其义自现。书越读越新,不同的时间读相同的内容可以读出不一样的东西。念念不忘,必有回响。当你下定决心,学习新的知识,一定要全身心,长期投入,直到完全吃透为止。Perl程序员(gh_a5d80041dda0) 
 文章为作者独立观点,不代表微头条立场
的最新文章
踩的坑越多,走的路越远。我年轻过、落魄过、幸福过,我对生活一往情深。
心之所向,素履以往; 生如逆旅, 一苇以航。踩的坑越多,走的路越远。我年轻过、落魄过、幸福过,我对生活一往情深。
心之所向,素履以往; 生如逆旅, 一苇以航。管道和EOF是bash里面的天才发明。bash的EOF有2个功能,一是标记一段文字,二是后续的输入和程序互动,实现自动化。perl吸收了EOF,主要用于标记一段内容。Tie-File 模块把文件绑定到perl数组中,通过操纵perl数组来直接修改文件。彼时正年少,莫负好时光。PerlChina 2016 大会将于日在北京举行。懂正则的人才会喜欢并依赖perl。正则让文本处理更简单。数据时代,数据就是财富。而perl是开启财富之门的钥匙。数据时代已经到来,你准备好了吗? 你的世界有perl更精彩。说好的爬虫,来了。程序员要不要写图形界面,我认为是会写简单界面,没必要追求特效。而Tk作为一个经典的GUI库,具有学习简单,代码少,使用方便,界面简单简洁等特点,非常适用于行业软件的开发。Set::Scalar 是一个优秀的集合操作模块。交集,补集(差集),并交集等操作。也许你现在已经二十,也许你已经为人父或母,也许你已步入中年,只要童心未泯,年年儿童节,祝大家节日快乐。之前推荐过DateTime,它的特点是时间的计算。DateTime::Format::Strptime的特点可以设置时间的输入格式和输出格式。x问下11/Apr/:01怎么转化成 00:00:01。unix(linux)的特色之一就是管道和各种各样的命令,通过管道把各个命令拼接在一起完成强大的功能。借助管道perl和bash能实现无缝对接。越努力越幸运。关于“变长数组”这个翻译,真的不确切!如果是我,我更愿意翻译为:变量数组。越努力越幸运。perl的最大特色就是hash和正则,新手掌握了hash和正则,文本处理就会非常容易。因为正则,喜欢perl。每个人都有自己喜欢的语言,每个语言都有自己的性格和特点。人总是认为自己喜欢的语言是最好的,从而无意识的排斥其它语言的学习,这不利于自身的发展。假如把人生看做是一场马拉松比赛。上半场我为金钱,房子,地位,面子活,现在一切衣食无忧了,下半场我要为健康艺术而活。perl 申明包全局变量有3种方法:1.our 2.全限定名称3.避开strict和warnings的检查。 包全局变量可以在包外访问。双冒号(::)在perl5中具有非常重要的地位,如同c++中的namespace,有了它可以实现包机制,class机制。perl的特性之一上下文,双冒号:: 主要有2个应用场景1路径分隔符,2命令空间。perl的特性之一就是上下文,同一个东西遇到标量是一种结果,遇到数组又是另一种结果。借助wantarray和三目运算符可以轻松轻松实现这种机制。 return wantarray?array:scalar;$func_ref->()->()->()。 \n
作为一个perler,看到的小箭头和一个小括号在一起->(),第一个箭头解析的对应的是最外面的一层皮。第一层解析结束(剥完了),才可以用第二个箭头解析第二层的函数了(剥第二层皮了)。基本每个语言中都会有EventEmitter的类,可见这个模块的重要性。 通过Mojo-EventEmitter可以构建事件对象。一般情况下,事件对象是依附于其他具体的对象的。Storable 一劳永逸,对perl中的数据结构即存store即用retrieve。nstore 可以跨平台,兼容性更好。 Storable 模块可以用神奇来形容,能存储和解析各种perl的数据结构。一次解析存储,永久使用的目的。perl的语言学特性之一,上下文。就好比同一个人在不同环境中有不同的身份。perl 的黑魔法[一],字符串转16进制,printf "\\x%*v02x","\\x","abc"语言进化的趋势,把任何东西都当成对象。
在perl6中变量也是对象,正如python中一样,变量有自己对应的方法。
另外perl6 也可以定义变量类型。同时引入了绑定操作符:=gh_a5d80041dda0Perl学习公众号,为你解决各种问题,提供学习资料,学Perl不孤单热门文章最新文章gh_a5d80041dda0Perl学习公众号,为你解决各种问题,提供学习资料,学Perl不孤单codepad – 又一款简单在线 IDE 编辑器
Loading...
Ps. 在此说明一点关于在线 IDE 的存在意义:当你找不到编译器而又想验证一段代码的时候,当你觉得打开庞大的 IDE 所需要的时间比你自己把代码手打进去的时间还要多的时候,当你不想安装大量的各种语言的编译器的时候,你不觉得,这类不需要打开编译器、IDE,不需要建工程,不需要存成文件,而且支持多种语言的在线 IDE 正是你所需要的吗?
这个我常常拿来验证python的代码呢,挺不错的。
多少觉得,这种东西才是云的真谛。
按分类查看文章:
大家都在讨论些什么
: 谢谢~~: 有的哦,比如点唱机: 这...没这本事: 额,术业有专攻,安卓大大们就交给青小蛙吧,啊哈哈哈: 晚上20:52
真的还没好。。缓存了吧。。还好自己 Google 搜到了。。: send ^#{Right}发送按键有延迟,快速切换时可能变成^{WheelDown},使用SendInput ^#{Right}可解决。: send ^#{Right}在快速切换的时候貌似会触发^{WheelDown},改成SendInput ^#{Right},就可以了
最热门标签
传说中的小众软件 让你的手机应用与众不同。
个人 blog 转载时请遵循 “署名-非商业性使用-相同方式共享” 的创作共用协议;
商业网站或未授权媒体不得复制本站内容。perl的LWP是抓取网页的经典模块,学习的过程中用这个模块写了一个小程序,是通过抓取有道翻译的翻译结果来实现的。废话不多说,先贴代码(解释见下文
#! /usr/bin/perl
#学习perl LWP时用post做的翻译小脚本
#调用的是有道词典
use LWP::UserA
use JSON ;
#use Data::D
my $browser = LWP::UserAgent-&new();
print "Please input the word:";
chomp (my $input = &STDIN&);
my $response = $browser-&post(
'/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=.hk/',
'/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null',
'type' =& 'AUTO',
'i' =& "$input",
'doctype' =& 'json',
if($response-&is_success){
my $result = $response-&
my $json = new JSON;
my $obj = $json-&decode($result);
#print Dumper $
my $trans = @{$obj-&{'translateResult'}[0]}[0]-&{"tgt"};
$trans = "翻译结果:$trans" if $trans;
my $string;
= join " ", @{$obj-&{'smartResult'}-&{"entries"}};
$trans = "$trans\n其他结果:$string" if $string;
print $trans."\n" // "Not found\n";
LWP实现表单POST提交
在chrome下打开,然后在打开审查元素功能,试着输入hello,然后使用自动翻译,就可以捕获到下列的POST请求。
我们使用LWP::UserAgent模块来模仿浏览器实现的POST功能。LWP的经典教程可以在学习。
需要调用的函数为&$browser-&post(url,&pairs_arrayref),其中,pairs_arrayref为提交的参数,在这里我们根据Form Data里的信息就可以得出参数列表,我们这里的列表选择的是i代表提交的需翻译的单词,type是自动翻译,doctype 指的是返回的数据为json数据
my $response = $browser-&post(
'/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=.hk/',
'/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null',
'type' =& 'AUTO',
'i' =& "$input",
'doctype' =& 'json',
返回的JSON如下
{"type":"ZH_CN2EN","errorCode":0,"elapsedTime":10,"translateResult":[[{"src":"你好","tgt":"How are you"}]],"smartResult":{"type":1,"entries":["","hello;hi"]}}
其中translateResult是翻译结果,smartResult是其它结果。
我们使用的是perl的JSON模块来对json数据进行解析(JSON模块的文档见)
my $result = $response-&
my $json = new JSON;
my $obj = $json-&decode($result);
使用decode将json数据转化成了perl的数据,返回的是对象的引用。
为了方便,我们可以将其用Dumper将对象打印出来看内部的结构(Data::Dumper的文档在)
print Dumper $obj
这是翻译&你好&的时候显示的结果(终端下中文有点乱码..):
'smartResult' =& {
'entries' =& [
"hello\x{ef}\x{bc}\x{9b}hi"
'type' =& 1
'errorCode' =& 0,
'translateResult' =& [
'tgt' =& 'How are you',
'src' =& "\x{e4}\x{bd}\x{a0}\x{e5}\x{a5}\x{bd}"
'type' =& 'ZH_CN2EN',
'elapsedTime' =& 10
可以看出整个$obj是一个匿名哈希引用,而其中smartResult也是一个匿名哈希引用,translateResult则是一个匿名数组引用,然后一层层下去,最终键src的的值为翻译结果(关于perl的引用可以看我的)于是,我们可以用下列方式提取翻译结果。
my $trans = @{$obj-&{'translateResult'}[0]}[0]-&{"tgt"}; #最终翻译结果
@{$obj-&{'smartResult'}-&{"entries"}}; #其他智能翻译结果
最后运行截图:
阅读(...) 评论()perl模块之CGI::Ajax来实现异步通信
作者为 扶 凯 于
ajax全名为Asynchronous JavaScript and XML ,异步javascript和xml.这是web2.0的主流技术.在perl中就不用自己实现了.perl中就有很好用的模块.这样我们就不用花大量的时间来研究浏览器和服务器上的perl怎么交互了.
我们只要安装CGI::Ajax这个模块就能实现一个java的事件和一个perl的程序关联起来.perl的模块程序自动生成javascript调用的代码,这样我们可以多关注程序本身的功能.
#cpan CGI::Ajax
建议参考文章:/pub/a//ajax_and_perl.html
下面是cpan中的例子,我用中文在注解一下.
#所有能生成html的模块都行.为了方便我们用最常用的CGI模块
use CGI::A
my $cgi = new CGI;
my $pjx = new CGI::Ajax( 'exported_func' => \&perl_func );
#上面最重要了.上面'exported_func'是一个ajax的功能函数.就是一个事件,关联到perl_func这个功能上面
print $pjx->build_html( $cgi, \&Show_HTML);
#这是给下面的show_html中的html输出成模块的网页.
# 这个函数收到的就是ajax提交过来的内容,然后处理,处理的结果是在javascript中 'exported_func'定义的,不急下面可以见到
sub perl_func {
my $input =
# do something with $input
my $output = $input . " was the input!";
return( $output );
sub Show_HTML {
my $html = <<EOHTML;
Enter something:
#注意,这个地方.exported_func的函数是上面关联的内容.其中之一val1是DOM中的ID为val1的内容.resultdiv是id为resultdiv的内定.
#val1是源,是输入.resultdiv为输出.输出后的内容会放到id为resultdiv的div中.
perl的CGI::Ajax注意
最重要的内定.多个输入,输入的内容为dom中的中的id的值.目的为输出时的dom的值.
onClick=&#8221;JSFUNC([&#8216;source1&#8242;,&#8217;source2&#8217;], [&#8216;dest1&#8242;,&#8217;dest2&#8217;]);&#8221;
如果你想自己控制输出,可以在输入的时候[&#8216;resultdiv&#8217;] ,写成一个javascript的函数,用那个函数对输出进行了处理.如下
onClick=&#8221;exported_func([&#8216;input1&#8217;],[js_process_func]);&#8221;
ajax中文的处理
my @headers=( &#8220;text/ charset=UTF-8&#8221;, );
print $ajx-&build_html( $cgi, \&Show_HTML ,@headers);#记的@headers前不要加\,那样就变成了引用,中文还是会不正常的.
转载请注明:作者为 扶 凯 于
在 http://www. 发表
如果发现内容有误请告知我, 我将及时更正。
文章总数:
评论总数:
页面总数:
分类总数:
标签总数:
网站已运行:如何从零学编程?_百度知道

我要回帖

更多关于 perl编写日志分析脚本 的文章

 

随机推荐