自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 Perl Symbolic Reference

看一些模块的代码,很多时候通过*glob的方式来改变变量或者函数,这种方法称为Symbolic reference。首先看一下*glob的结构,这个在之前的博文已经讲过,不做细述:SV = PVGV(0x18d1364) at 0x182aaec REFCNT = 2 FLAGS = (IN_PAD) NAME = "test" NAMELEN = 4 GvST

2013-08-07 17:04:39 1443

原创 Background Job "Stopped" with SSH

运行了一个后台程序,此程序调用SSH远程执行另外的任务,当多个这样的后台程序执行的时候,状态经常从Running 变为Stopped,导致程序中断。解决办法,覆盖三个I/O,具体参考:http://en.wikipedia.org/wiki/NohupOvercoming hangingNote - Nohupping backgroundedjobs is typically u

2013-05-30 14:15:19 1069

原创 Perl Test::Unit::Lite

找了半天,终于找到一个轻量级测试框架Test::Unit::Lite,这个框架只有一个文件,不需要依赖其他文件,如果使用其他测试框架需要下载很多其他依赖模块,如果是手动下载的话基本是mission impossible。说说它的使用:首先写一个测试模块,所有的test case 都必须以test_ 开头,运行的时候并不按照编写顺序运行,而是按照字母排列顺序运行,这是和Perl 本身

2013-03-17 12:12:32 1641

原创 Perl threads join 返回值

写一个多线程脚本过程中遇到一个奇怪的问题,线程的返回值总为空,仔细探究了一下,终于搞明白了原因。Perl 多线程创建过程中可以显示或者隐式的指定context,可以理解为返回值内容,如果没有显示指定则会根据脚本写法来推测返回值。看下边脚本的例子:use threads;# return scalarsub test{ return "this is testing @_\

2013-01-08 11:13:13 2560

原创 Perl LWP&HTTP

闲来无事看了下LWP 模块,简单整理出了下图,作为一个概貌。HTTP::Message 是基类,HTTP::Request & HTTP::Response继承了它,同时他们也都用到HTTP::Header 模块。LWP 主要是UserAgent,使用它来调用get/post 发送请求,内部使用request 发送,底层使用相应的scheme如http/ftp等模块定义的request

2013-01-04 13:33:00 1186

原创 Perl 腾讯股票信息收集

之前的新浪股票脚本信息不太全,参考前面一篇文章腾讯股票接口,写了一个更加方便的,信息比较全的。看代码:use utf8;use Encode;use strict;use warnings;use LWP::UserAgent;use threads (exit => 'threads_only',);use threads::shared;use constant UR

2013-01-01 15:40:03 10370 3

原创 Perl threads 摘要

最近又写了一个多线程的小工具,对一些多线程的使用有了进一步的心得。Perl 创建线程有两种方式,正常通过threads->create 创建线程,用async  创建一个调用匿名过程的线程,具体参考perldoc threads。线程共享变量需要使用 threads::shared,共享变量只能存储scalar,共享变量的引用,如果存储List Hash的引用需使用shared_clo

2012-12-27 16:37:18 4449

原创 腾迅股票数据接口 http/javascript

之前使用了新浪的股票数据,由于新浪http/javascript缺少一些数据,用chrome自带的开发工具监视腾迅财经HTTP信息,得到以下获取股票数据的方法。以五粮液为例,要获取最新行情,访问数据接口:http://qt.gtimg.cn/q=sz000858返回数据:v_sz000858="51~五 粮 液~000858~27.78~27.60~27.70~41

2012-12-21 23:48:51 109806 7

原创 Perl 新浪股票信息收集

通过解析SINA HTTP 返回的数据获取股票信息,具体返回值参考文章实时股票数据接口大全。使用说明:perl script.pl [-c -f] -d 获取默认@defaultstock列表中股票信息,参数-c 清屏,参数-f 输出更加完整的信息,参考图例perl script.pl -m [sh sz zx cy] 四个参数分别代表获取上海,深圳,中小,创业板股票的信息

2012-12-21 22:22:46 7162

原创 Perl object/bless

Perl object实际上就是一个数据结构的引用,只不过用bless把它和包绑定在一起,像类一样调用函数的过程只是从bless绑定的包中调用相应函数的过程。看下边的例子:package Test;sub new{ my $class = shift; bless {},$class;}sub test{ my $self = shift; print "this is

2012-12-19 14:56:21 2153

原创 Perl B module

Perl 脚本都是内部编译为语法树,然后根据语法树解析执行每一步。察看一个脚本的语法树用模块B::Concise,简单说明如下:B::Concise - 遍历语法树,打印每一个执行码(ops)的内容用法:perl -MO=Concise[,OPTIONS] script常用OPTIONS:-basic: 默认模式,打印内存树状结构OPs-exec: 根据执行

2012-12-12 14:25:55 1445

转载 [JavaScript]ECMA-262 深入解析

今天看到一位js大侠的bolg,最新内容主要是关于ECMA-262-3的,实在是太有价值,这里推荐给大家。ECMA-262大家应该都不陌生吧,陌生就看这里(ECMAScript Language Specification)。要学好js,深入理解ECMA-262肯定是必经之路,那么如何深入理解ECMA-262就是一个要严肃对待的问题,狠功夫肯定是要下的,但是也有一些好的资源可以让我们事半功倍。

2012-12-07 13:55:09 1018

原创 Perl 单行编辑技巧

Perl 有一些简单的单行技巧,可以帮助很方便的实现一些文件编辑查找。介绍几个常用的方法:C:\>perl -hUsage: D:\Perl\bin\perl.exe [switches] [--] [programfile] [arguments] -0[octal] specify record separator (\0, if no argument)

2012-12-06 11:01:43 2105

原创 Perl lib path

Perl 中默认LIB路径有如下几个地方可以存储:Perl -V 中@INC变量,这是编译时绑定的系统环境变量PERL5LIB,如set PERL5LIB=D:/tmp脚本中use lib 添加所有的操作最后都是在系统变量@INC 中添加一个路径,按照先后顺序依次查找,默认的先后顺序是上边三类的倒序排列,看如下示例。没有添加额外的路径的情况:(默认当前目录会添加到LIB

2012-12-05 13:39:49 5609

翻译 Perl 内部结构详解 -- PerlGuts Illustrated (6 CV)

CVcode value,函数的结构,如下图:下边示例可以看到几个主要参数:函数所在的Stash & GV。函数的参数表和临时变量表PADLIST。D:\Tmp>perl -MDevel::Peek -e "sub a{my ($a,$b,$t); } Dump \&a"SV = RV(0x3a90f0) at 0x3a90e4 REFCNT = 1 FLAG

2012-11-21 10:17:01 1862

翻译 Perl 内部结构详解 -- PerlGuts Illustrated (4 HV)

HVhash table是最复杂的数据结构,HV使用HE struct表示key/value结构,使用HEK表示key。GvSTASH 当这个hash表示一个命名空间(模块),STASH指向Perl 语法树的一个节点,用来实现reset。(略过,未搞明白)ARRAY 数组用于分配储存hash值,它的大小必须是2的n次方,当hash为空情况下,ARRAY为NULL

2012-08-02 17:19:39 8864

翻译 Perl 内部结构详解 -- PerlGuts Illustrated (3 AV)

AV数组,结构如图所示:字段ALLOC 指向实际分配的SV 数组的开头地址。字段ARRAY 指向数组本身的开头地址,由于数组的改变,这个地址比起实际分配的地址,可能会产生一定的偏移。字段FILL 指向数组本身最后一个位置的偏移。字段MAX 指向分配的SV 数组最后一个位置的偏移。C:\>perl -MDevel::Pe

2012-08-01 16:47:13 1988

原创 Perl 最简单配置文件

脚本中经常需要用到配置文件,一般来说可以用INI, XML来编辑配置文件,缺点是需要按照特定的格式配以特定的解析方法,需要额外引入其他的模块或者方法。用脚本语言Perl/Python来实现的话,最简单的方法就是用另外一个脚本来存储变量,使用的时候直接引入即可。优点是不需要额外的解析方法,而且配置灵活,可以用语言本身支持的数据结构来表示各种复杂的配置。示例:config.pl%c

2012-08-01 15:24:38 3145

翻译 Perl 内部结构详解 -- PerlGuts Illustrated (2 SV)

_SV_HEAD and struct sv下面来看一下最简单的类型struct sv,代表了SV,GV,CV,AV,HV,IO的通用结构。如下图所示:第一个字段Any可以指向任意结构,除了RV,所有的其他类型都是由Any指向的附加数据来实现。第二个字段REFCNT表明了有多少pointers引用了这个object。初始置为1,当有pointers指向它或者被销毁的时候,这

2012-07-31 14:57:52 10367

翻译 Perl 内部结构详解 -- PerlGuts Illustrated (1)

首先看一下Perl data structure。Perl内部称为SV(scalar value), AV(array value), HV(hash value), 此外IV代表integer, NV代表double, PV代表string, RV代表指针,指向另外的任意数据结构。Perl内部的数据结构之间的关系很像OO,用C structure内存裁减的方式模拟C++的继承。各种结

2012-07-31 13:59:41 3670

翻译 Perl 内部结构详解 -- PerlGuts Illustrated

之前想看一下Perl的实现,无意中搜到了这篇文章,对Perl内部类型的结构解释的很清晰,推荐感兴趣的都仔细看一下,想优化的时候做到心中有数。接下来的几篇blog将翻译这篇文档中常见类型的部分,做个记录,加深印象,同时也方便大家阅读理解。PerlGuts Illustrated直接命令行的方法查看:perl -MDevel::Peek -e "$a = 123; Du

2012-07-26 23:29:56 2761

原创 Perl 前缀树实现(2)

在前一篇 Perl 前缀树实现 中用hash table的方法实现了前缀树,算法导论中用数组来实现,方法基本相同,下边用链表的方法来实现,遍历算法可以用到其他树结构遍历。代码:use Data::Dumper;# 默认只支持字符串的输入sub trie_tree{ my $root = { char=>undef, next=>undef,

2012-07-26 22:39:51 1262

原创 字符串循环移位

看到一个练习,判断两个相同长度字符串其中一个是否是另外一个循环移位的结果,思路是把其中一个字符串连接自身,用KMP算法判断另外一个是否是这个字符串的字串。示例:a: “this testing”b: ”ingthis test“判断a 是否是“ingthis testing this test” 的子串即可。由此反向想到另外一个需求,字符串循环移位。思路是把此字符串连接

2012-07-24 21:47:46 1610 1

原创 Perl 前缀树实现

前缀树,用来处理大量字符串的查找、排序,也称为字典树,可以代替hash table。http://en.wikipedia.org/wiki/Trie以下翻译自Wikipedia:The following are the main advantages of tries over binary search trees (BSTs):Looking up keys

2012-07-22 02:17:15 2596 1

原创 Python 快排

上一篇文章用Perl 实现了快排,这里用Python 实现。不同点:Perl 传递列表slice 实际上还指向父列表相同的元素,这是由Perl 本身的数据结构所决定的。而Python 传递slice 则是一个新的列表,所以参数传递稍有不同。一个例子说明Perl传参的不同:sub test{ $_[2] = 'testing';}@x = (1..10);t

2012-07-18 15:30:22 2136

原创 Perl 快排

看了下算法导论中的快排,实现方法不太一样,重新练习一下。如图为比较过程中的移动:代码:# 递归sub qsort2 { return () unless @_; ( qsort( grep { $_ < $_[0] } @_[ 1 .. $#_ ] ), $_[0], qsort( grep { $_ >= $_[

2012-07-18 12:51:03 1051

原创 Perl 堆排序

看了算法导论堆排序,用Perl 实现一下,具体原理不解释,做个记录。代码:@a = map {int(rand 100)} 1..20;sub build_heap{ my $length = $#_; for(my $i = $length>>1; $i >= 0; $i--){ heapnify(\@_, $length, $i);

2012-07-15 20:38:53 1348 1

原创 Perl 判断一个字符串中所有字符是否在另外一个字符串中出现

在酷壳 – CoolShell.cn 中看到一个文章,判断一个字符串中的所有字符是否在另外一个字符串中出现,如果用循环的话时间复杂度是O(mxn),如果使用先排序后判断时间复杂度是O(mlgm)+O(nlgn)+O(m),作者面试的时候考官给出的一个思路是每个字符给一个素数,所有的树相乘,再用这个数去除另外一个字串中字符对应的数,余数为0的话则包含在第一个字串中,时间复杂度为O(m+n),思考了以

2012-07-15 15:44:03 4841

原创 Perl KMP 算法

了解了一下KMP 算法,自己尝试实现,也比较简单,具体原理参考google baidu,不再重复,这里只作为一个学习的纪录。use Data::Dumper;my $from = 'abababd ababc';my $find = 'ababc';# 分隔字符串为arraymy @from = split '', $from;my @find = split '', $fi

2012-07-11 14:55:43 1008

原创 Perl 闭包模拟类实现二叉树

在上一篇文章中用函数方式实现了一个二叉树,本篇用闭包模拟类的方式来重新实现,不同于传统意义的Perl 类,否则也不用去费力重新实现,本篇用闭包来模拟类的一些行为,以消息传递的方式调用方法。功能同上一个版本的基本一样,是用闭包的好处:1。 模拟类行为,开放类方法2。 内部变量不可直接修改,只能通过方法调用获取或修改值3。 消息类型多样,自己可以随便控制特点:1

2012-07-05 15:39:14 1605

原创 Perl 二叉搜索树

用Perl 的一般方式实现了一个完整的二叉搜索树,有如下功能:1. 插入,删除,搜索2. 最大,最小值3. 某节点的前序节点,后序节点整个过程中更改了好几次:1. 增加了parent 属性,可以方便的找到父节点,有利于前序后序节点的查找。2. 最初节点不是都有left right 属性,只有在有子节点的情况下才出现,后来为了统一所有节点都加上这些属性,没有子节点的情

2012-07-04 23:54:54 1152

原创 Perl 引用变量传入函数中的行为

程序中遇到一个问题,一个引用变量传入函数中,如果赋值一个新的引用,则外部引用没有改变,如果更改引用内容,则变量随之改变,做个记录,下次注意。如下为示例:sub test1{ my $x = shift; $x = {left=>undef, right=>undef, key=>123, parent=>undef,};}sub test2{ my $x = shi

2012-06-24 15:12:51 1004

原创 Perl 闭包实现简单OO

闭包是个神奇的东西,有很多奇妙地用法,用它可以来模拟实现OO 的一些功能。以下代码用闭包和消息传递的方法实现了OO 继承,重写。有兴趣可以看看Lisp CLOS 的实现方法,参考用来模拟实现另外一种Perl OO。可以看看Meta programming,Mouse 的OO 实现部分,相信会对你有很大的帮助。sub shape { (my $newx, $newy) = @_; ret

2011-11-11 23:57:56 994

原创 Perl dynamic property, method

看Mouse源代码的过程中发现perl一个很有意思的地方,可以非常方便的动态更新一个已有模块的方法或者变量,而且这个方法存在于很多其他模块中,尤其是Exporter。Example:{  package Data::Dumper;  sub test{    print "testing in new\n";  }}use Data::Dumper;

2011-10-27 15:23:27 571

原创 Perl Class::Accessor 分析

最近学习Perl OO, MetaClass 相关的模块,简单的分析一下Class::Accessor 这个模块。功能:自动实现字段的存取定义函数。示例:package Foo;use base qw(Class::Accessor);Foo->follow_best_practice;Foo->mk_accessors(qw(name role salary)

2011-10-18 16:28:10 1200

原创 Python Gearman 分析(1)

<br />python gearman 分析:<br /><br />偶然看到这个框架,发现他的用途还是挺广泛的,读了他的源码并尝试对其进行一个分析,加深自己的理解同时方便以后其他方面的应用和见解。以下是对python gearman的流程的一个深入的分析。<br /><br /><br />Server:<br />1. Server启动并初始化一个TaskManager,之后通过asyncore.loop监控socket连接。<br />2. 每个新的连接都用GearmanSe

2011-03-30 17:51:00 2669

原创 Python SocketServer 分析

研究了一下SocketServer模块,记录下每个类下函数的调用关系,加深了解class BaseServer:========================================================+ __init__ (绑定server_address, RequestHandlerClass)+ server_forever   + han

2011-03-10 00:41:00 2030

原创 Perl XML::Simple parse simple xml file

用Perl解析xml文件,又不想下载其它模块如Dom,可以用XML::Simple来完成这个任务。实际工作中用到的几个有用的属性:1. KeepRoot => 1生成的hash中显示根节点,否则从下一层节点开始显示。2. ForceContent => 1生成的hash中以hash结构保存节点值,如:nodename => { content => 'value

2010-12-28 23:38:00 1775

原创 Python transfer file through xmlrpc

实际操作中经常要在两个计算机之间传输文件并完成一些处理,共享文件夹只能存在一个固定的地方,FTP则需要单独下载软件,用python写了一个脚本,利用xmlrpc特性传输文件。传输中要用xmlrpclib.Binary包装数据,接收端需要用Binary.data返回原始数据并保存。Server--------------------------------------------

2010-12-26 11:02:00 2218

原创 Perl implement Tree data structure (2)

之前用struct实现的Tree不够灵活,重新使用hash来实现,更加灵活而且可以更改节点,进而实现平衡二叉树。以下为程序代码:use Data::Dumper;my $tree = {};add($tree,$_) for (5,7,1,4,9,6,0,9,100,20,30,21,60);print Dumper $tree;LMR($tree,$tre

2010-12-18 04:23:00 1423

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除