<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[USTBHacker的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/USTBHacker</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; USTBHacker]]></copyright><item><title><![CDATA[Perl Symbolic Reference]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/9819801</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/9819801</guid><author>USTBHacker</author><pubDate>Wed, 07 Aug 2013 17:04:39 +0800</pubDate><description><![CDATA[看一些模块的代码，很多时候通过*glob的方式来改变变量或者函数，这种方法称为Symbolic reference。


首先看一下*glob的结构，这个在之前的博文已经讲过，不做细述：
SV = PVGV(0x18d1364) at 0x182aaec
  REFCNT = 2
  FLAGS = (IN_PAD)
  NAME = "test"
  NAMELEN = 4
  GvST]]></description><category></category></item><item><title><![CDATA[Background Job "Stopped" with SSH]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8994421</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8994421</guid><author>USTBHacker</author><pubDate>Thu, 30 May 2013 14:15:19 +0800</pubDate><description><![CDATA[运行了一个后台程序，此程序调用SSH远程执行另外的任务，当多个这样的后台程序执行的时候，状态经常从Running 变为Stopped，导致程序中断。
解决办法，覆盖三个I/O，具体参考：http://en.wikipedia.org/wiki/Nohup

Overcoming hanging
Note - Nohupping backgroundedjobs is typically u]]></description><category></category></item><item><title><![CDATA[Perl Test::Unit::Lite]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8683220</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8683220</guid><author>USTBHacker</author><pubDate>Sun, 17 Mar 2013 12:12:32 +0800</pubDate><description><![CDATA[找了半天，终于找到一个轻量级测试框架Test::Unit::Lite，这个框架只有一个文件，不需要依赖其他文件，如果使用其他测试框架需要下载很多其他依赖模块，如果是手动下载的话基本是mission impossible。


说说它的使用：
首先写一个测试模块，所有的test case 都必须以test_ 开头，运行的时候并不按照编写顺序运行，而是按照字母排列顺序运行，这是和Perl 本身]]></description><category></category></item><item><title><![CDATA[Perl threads join 返回值]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8480037</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8480037</guid><author>USTBHacker</author><pubDate>Tue, 08 Jan 2013 11:13:13 +0800</pubDate><description><![CDATA[写一个多线程脚本过程中遇到一个奇怪的问题，线程的返回值总为空，仔细探究了一下，终于搞明白了原因。
Perl 多线程创建过程中可以显示或者隐式的指定context，可以理解为返回值内容，如果没有显示指定则会根据脚本写法来推测返回值。看下边脚本的例子：

use threads;

# return scalar
sub test{
    return "this is testing @_\]]></description><category></category></item><item><title><![CDATA[Perl LWP&HTTP]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8464194</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8464194</guid><author>USTBHacker</author><pubDate>Fri, 04 Jan 2013 13:33:00 +0800</pubDate><description><![CDATA[闲来无事看了下LWP 模块，简单整理出了下图，作为一个概貌。


HTTP::Message 是基类，HTTP::Request & HTTP::Response继承了它，同时他们也都用到HTTP::Header 模块。LWP 主要是UserAgent，使用它来调用get/post 发送请求，内部使用request 发送，底层使用相应的scheme如http/ftp等模块定义的request]]></description><category></category></item><item><title><![CDATA[Perl 腾讯股票信息收集]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8457341</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8457341</guid><author>USTBHacker</author><pubDate>Tue, 01 Jan 2013 15:40:03 +0800</pubDate><description><![CDATA[之前的新浪股票脚本信息不太全，参考前面一篇文章腾讯股票接口，写了一个更加方便的，信息比较全的。看代码：

use utf8;
use Encode;

use strict;
use warnings;
use LWP::UserAgent;
use threads (exit => 'threads_only',);
use threads::shared;

use constant UR]]></description><category></category></item><item><title><![CDATA[Perl threads 摘要]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8443963</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8443963</guid><author>USTBHacker</author><pubDate>Thu, 27 Dec 2012 16:37:18 +0800</pubDate><description><![CDATA[最近又写了一个多线程的小工具，对一些多线程的使用有了进一步的心得。


Perl 创建线程有两种方式，正常通过threads->create 创建线程，用async  创建一个调用匿名过程的线程，具体参考perldoc threads。线程共享变量需要使用 threads::shared，共享变量只能存储scalar，共享变量的引用，如果存储List Hash的引用需使用shared_clo]]></description><category></category></item><item><title><![CDATA[腾迅股票数据接口 http/javascript]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8365756</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8365756</guid><author>USTBHacker</author><pubDate>Fri, 21 Dec 2012 23:48:51 +0800</pubDate><description><![CDATA[之前使用了新浪的股票数据，由于新浪http/javascript缺少一些数据，用chrome自带的开发工具监视腾迅财经HTTP信息，得到以下获取股票数据的方法。


以五粮液为例，要获取最新行情，访问数据接口：

http://qt.gtimg.cn/q=sz000858
返回数据：

v_sz000858="51~五 粮 液~000858~27.78~27.60~27.70~41]]></description><category></category></item><item><title><![CDATA[Perl 新浪股票信息收集]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8365609</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8365609</guid><author>USTBHacker</author><pubDate>Fri, 21 Dec 2012 22:22:46 +0800</pubDate><description><![CDATA[通过解析SINA HTTP 返回的数据获取股票信息，具体返回值参考文章实时股票数据接口大全。


使用说明：

perl script.pl [-c -f] -d 获取默认@defaultstock列表中股票信息，参数-c 清屏，参数-f 输出更加完整的信息，参考图例
perl script.pl -m [sh sz zx cy] 四个参数分别代表获取上海，深圳，中小，创业板股票的信息]]></description><category></category></item><item><title><![CDATA[Perl object/bless]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8331361</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8331361</guid><author>USTBHacker</author><pubDate>Wed, 19 Dec 2012 14:56:21 +0800</pubDate><description><![CDATA[Perl object实际上就是一个数据结构的引用，只不过用bless把它和包绑定在一起，像类一样调用函数的过程只是从bless绑定的包中调用相应函数的过程。看下边的例子：

package Test;

sub new{
	my $class = shift;
	bless {},$class;
}

sub test{
	my $self = shift;
	print "this is]]></description><category></category></item><item><title><![CDATA[Perl B module]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8286348</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8286348</guid><author>USTBHacker</author><pubDate>Wed, 12 Dec 2012 14:25:55 +0800</pubDate><description><![CDATA[Perl 脚本都是内部编译为语法树，然后根据语法树解析执行每一步。察看一个脚本的语法树用模块B::Concise，简单说明如下：


B::Concise - 遍历语法树，打印每一个执行码(ops)的内容
用法：perl -MO=Concise[,OPTIONS] script



常用OPTIONS：
-basic: 默认模式，打印内存树状结构OPs
-exec: 根据执行]]></description><category></category></item><item><title><![CDATA[[JavaScript]ECMA-262 深入解析]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8269137</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8269137</guid><author>USTBHacker</author><pubDate>Fri, 07 Dec 2012 13:55:09 +0800</pubDate><description><![CDATA[今天看到一位js大侠的bolg,最新内容主要是关于ECMA-262-3的，实在是太有价值，这里推荐给大家。
ECMA-262大家应该都不陌生吧，陌生就看这里(ECMAScript Language Specification)。要学好js，深入理解ECMA-262肯定是必经之路，那么如何深入理解ECMA-262就是一个要严肃对待的问题，狠功夫肯定是要下的，但是也有一些好的资源可以让我们事半功倍。]]></description><category></category></item><item><title><![CDATA[Perl 单行编辑技巧]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8263799</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8263799</guid><author>USTBHacker</author><pubDate>Thu, 06 Dec 2012 11:01:43 +0800</pubDate><description><![CDATA[Perl 有一些简单的单行技巧，可以帮助很方便的实现一些文件编辑查找。介绍几个常用的方法：

C:\>perl -h

Usage: D:\Perl\bin\perl.exe [switches] [--] [programfile] [arguments]
  -0[octal]         specify record separator (\0, if no argument)]]></description><category></category></item><item><title><![CDATA[Perl lib path]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8259489</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8259489</guid><author>USTBHacker</author><pubDate>Wed, 05 Dec 2012 13:39:49 +0800</pubDate><description><![CDATA[Perl 中默认LIB路径有如下几个地方可以存储：

Perl -V 中@INC变量，这是编译时绑定的系统环境变量PERL5LIB，如set PERL5LIB=D:/tmp
脚本中use lib 添加
所有的操作最后都是在系统变量@INC 中添加一个路径，按照先后顺序依次查找，默认的先后顺序是上边三类的倒序排列，看如下示例。


没有添加额外的路径的情况：（默认当前目录会添加到LIB]]></description><category></category></item><item><title><![CDATA[Perl 内部结构详解 -- PerlGuts Illustrated (6 CV)]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/8204523</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/8204523</guid><author>USTBHacker</author><pubDate>Wed, 21 Nov 2012 10:17:01 +0800</pubDate><description><![CDATA[CV
code 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]]></description><category></category></item><item><title><![CDATA[Perl 内部结构详解 -- PerlGuts Illustrated (4 HV)]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/7823367</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/7823367</guid><author>USTBHacker</author><pubDate>Thu, 02 Aug 2012 17:19:39 +0800</pubDate><description><![CDATA[HV

hash table是最复杂的数据结构，HV使用HE struct表示key/value结构，使用HEK表示key。




GvSTASH 当这个hash表示一个命名空间（模块），STASH指向Perl 语法树的一个节点，用来实现reset。（略过，未搞明白）

ARRAY 数组用于分配储存hash值，它的大小必须是2的n次方，当hash为空情况下，ARRAY为NULL]]></description><category></category></item><item><title><![CDATA[Perl 内部结构详解 -- PerlGuts Illustrated (3 AV)]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/7818987</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/7818987</guid><author>USTBHacker</author><pubDate>Wed, 01 Aug 2012 16:47:13 +0800</pubDate><description><![CDATA[AV

数组，结构如图所示：




字段ALLOC 指向实际分配的SV 数组的开头地址。

字段ARRAY 指向数组本身的开头地址，由于数组的改变，这个地址比起实际分配的地址，可能会产生一定的偏移。


字段FILL 指向数组本身最后一个位置的偏移。


字段MAX 指向分配的SV
 数组最后一个位置的偏移。



C:\>perl -MDevel::Pe]]></description><category></category></item><item><title><![CDATA[Perl 最简单配置文件]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/7818614</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/7818614</guid><author>USTBHacker</author><pubDate>Wed, 01 Aug 2012 15:24:38 +0800</pubDate><description><![CDATA[脚本中经常需要用到配置文件，一般来说可以用INI, XML来编辑配置文件，缺点是需要按照特定的格式配以特定的解析方法，需要额外引入其他的模块或者方法。用脚本语言Perl/Python来实现的话，最简单的方法就是用另外一个脚本来存储变量，使用的时候直接引入即可。优点是不需要额外的解析方法，而且配置灵活，可以用语言本身支持的数据结构来表示各种复杂的配置。


示例：
config.pl
%c]]></description><category></category></item><item><title><![CDATA[Perl 内部结构详解 -- PerlGuts Illustrated (2 SV)]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/7814175</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/7814175</guid><author>USTBHacker</author><pubDate>Tue, 31 Jul 2012 14:57:52 +0800</pubDate><description><![CDATA[_SV_HEAD and struct sv
下面来看一下最简单的类型struct sv，代表了SV,GV,CV,AV,HV,IO的通用结构。如下图所示：



第一个字段Any可以指向任意结构，除了RV，所有的其他类型都是由Any指向的附加数据来实现。
第二个字段REFCNT表明了有多少pointers引用了这个object。初始置为1，当有pointers指向它或者被销毁的时候，这]]></description><category></category></item><item><title><![CDATA[Perl 内部结构详解 -- PerlGuts Illustrated (1)]]></title><link>https://blog.youkuaiyun.com/USTBHacker/article/details/7813817</link><guid>https://blog.youkuaiyun.com/USTBHacker/article/details/7813817</guid><author>USTBHacker</author><pubDate>Tue, 31 Jul 2012 13:59:41 +0800</pubDate><description><![CDATA[首先看一下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++的继承。各种结]]></description><category></category></item></channel></rss>