2011年12月4日星期日

Re: [PerlChina] Re: 写完 Advent Day 4 后,悲剧了。

Hi I have made one for the 4th day:)

=for advent_year 2011

=for advent_day 4

=for advent_title Getopt::Euclid

=for advent_author Joe Jiang

写脚本的时候,最麻烦的两件事,无非是写文档和设计用户接口。有了 Getopt::Euclid,这两件事情居然开始变得十分有趣了。应该说,文档驱>动的程序,这样的创意并不少见,可是用来作为用户接口,这真的还是让人觉得十分恰当。

相比其他的脚本参数分析模块,这个模块的知名度比较低,不过它的作者 Damian Conway 还是十分知名的。现在的维护者 Florent Angly 看起来
也是参数模块这方面的爱好者,一同被他收纳的还有 Getopt::Declare。

具体的使用方法可以参考以下的测试代码:

=begin code

    #!/usr/bin/perl -wl

    use Getopt::Euclid;
    print for @{$ARGV{-i}};

    =head1 NAME

    demo-euclid - testing of module Getopt::Euclid

    =head1 VERSION

    This documentation refers to demo-euclid version 0.0.1

    =head1 USAGE

        demo-euclid [options]  -i[n][file] <file>

    =head1 REQUIRED ARGUMENTS

    =over

    =item  -i[n][file] <file>

    Specify input file

    =for Euclid:
        repeatable
        file.type:    readable
        file.default: '-'

    =back

=end code

有了以上的代码,你就可以这样测试一下了:

=begin code

    $ perl demo-euclid.pl --version
    This is demo-euclid.pl version 0.0.1

=end code

看上去还不错,这个工具脚本已经可以自动汇报版本号了!然后再测试一下正式的功能:

=begin code

    $ perl demo-euclid.pl -i /etc/passwd -i /etc/group
    /etc/passwd
    /etc/group

=end code

这正是我们的工具需要的功能,也就是分行(因为 #! 行的末尾有个 l 选项)打印文件名。另外,文件不存在,或者不可读的时候,脚本还会自>动报错:

=begin code


    $ perl demo-euclid.pl -i /etc/pass
    Invalid "-i[n][file] <file>" argument.
    <file> must be readable but the supplied value ("/etc/pass") isn't.
    (Try: demo-euclid.pl --help)

    $ perl demo-euclid.pl --help
    Usage:

    demo-euclid.pl -i <file>
    ...

=end code

看上去还挺专业的,连相应的帮助信息也有了。衷心希望你会喜欢上这个小模块!





2011/12/4 Michael Zeng <galaxy2004@gmail.com>
//comfort 重要的东西注意备份啊,


 
2011/12/4 cnhack TNT <cnhacktnt@gmail.com>
准备生成 html 后再 commit 的。。。。


2011/12/4 Fayland Lam <fayland@gmail.com>
童鞋要注意经常 git commit or svn ci。

Thanks

2011/12/4 cnhack TNT <cnhacktnt@gmail.com>
原文是《使用 AnyEvent::HTTP 的高速代理验证程序》

55555....


2011/12/4 cnhack TNT <cnhacktnt@gmail.com>
欲哭无泪啊,写了一下午的 Day 4, 最后生成 html 的时候直接按 tab 做了这么个操作:

cnhacktnt@Apollo:proxy$ pod2advent ae_proxy.pod  > ae_proxy.pod


愣了一下,直接就悲剧了啊,还没 ci 到 git 里, 写的东西都没了。。。vim也退出了,连临时文件都没了。。。555,我敲了好几个小时啊。。。!

原文是《使用 AnyEvent::HTTP 的告诉代理验证程序》,现在只剩下代码了,算了,附上代码吧(见附件).

使用方式是,收集一部分待验证的 HTTP 代理地址,按如下格式存成 proxy.txt 文件:


201.75.96.153:3128

76.111.254.51:1111

211.139.10.183:80

78.154.146.173:80

200.52.133.188:8080

85.26.197.206:3128

86.110.154.82:3128

122.72.12.90:80

203.114.146.116:3128

190.201.126.171:8080

202.108.5.114:80

209.115.188.53:80

90.182.144.34:3128

204.188.215.51:3128

69.247.158.186:1586

202.154.4.23:8080

190.5.199.18:3128

123.127.98.170:80

109.75.64.30:3128

64.37.51.144:3128


然后使用如下命令:

cat proxy.txt | perl ae_proxy.pl | tee ,result


就可以看到结果了,验证8000多个代理,耗时28秒。(如果待验证代理数量不足最大并发数,至少也要5秒,因为超时时间为5秒)


哭死!哭死!哭死!

血泪的教训,同学们打命令别太快了。。。。。


--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。



--
Fayland Lam // http://www.fayland.org/

--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。



--
            Yours Sincerely
                    Zeng Hong

--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

Re: [PerlChina] Re: 写完 Advent Day 4 后,悲剧了。

//comfort 重要的东西注意备份啊,


 
2011/12/4 cnhack TNT <cnhacktnt@gmail.com>
准备生成 html 后再 commit 的。。。。


2011/12/4 Fayland Lam <fayland@gmail.com>
童鞋要注意经常 git commit or svn ci。

Thanks

2011/12/4 cnhack TNT <cnhacktnt@gmail.com>
原文是《使用 AnyEvent::HTTP 的高速代理验证程序》

55555....


2011/12/4 cnhack TNT <cnhacktnt@gmail.com>
欲哭无泪啊,写了一下午的 Day 4, 最后生成 html 的时候直接按 tab 做了这么个操作:

cnhacktnt@Apollo:proxy$ pod2advent ae_proxy.pod  > ae_proxy.pod


愣了一下,直接就悲剧了啊,还没 ci 到 git 里, 写的东西都没了。。。vim也退出了,连临时文件都没了。。。555,我敲了好几个小时啊。。。!

原文是《使用 AnyEvent::HTTP 的告诉代理验证程序》,现在只剩下代码了,算了,附上代码吧(见附件).

使用方式是,收集一部分待验证的 HTTP 代理地址,按如下格式存成 proxy.txt 文件:


201.75.96.153:3128

76.111.254.51:1111

211.139.10.183:80

78.154.146.173:80

200.52.133.188:8080

85.26.197.206:3128

86.110.154.82:3128

122.72.12.90:80

203.114.146.116:3128

190.201.126.171:8080

202.108.5.114:80

209.115.188.53:80

90.182.144.34:3128

204.188.215.51:3128

69.247.158.186:1586

202.154.4.23:8080

190.5.199.18:3128

123.127.98.170:80

109.75.64.30:3128

64.37.51.144:3128


然后使用如下命令:

cat proxy.txt | perl ae_proxy.pl | tee ,result


就可以看到结果了,验证8000多个代理,耗时28秒。(如果待验证代理数量不足最大并发数,至少也要5秒,因为超时时间为5秒)


哭死!哭死!哭死!

血泪的教训,同学们打命令别太快了。。。。。


--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。



--
Fayland Lam // http://www.fayland.org/

--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。



--
            Yours Sincerely
                    Zeng Hong

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

Re: [PerlChina] Re: 写完 Advent Day 4 后,悲剧了。

准备生成 html 后再 commit 的。。。。

2011/12/4 Fayland Lam <fayland@gmail.com>
童鞋要注意经常 git commit or svn ci。

Thanks

2011/12/4 cnhack TNT <cnhacktnt@gmail.com>
原文是《使用 AnyEvent::HTTP 的高速代理验证程序》

55555....


2011/12/4 cnhack TNT <cnhacktnt@gmail.com>
欲哭无泪啊,写了一下午的 Day 4, 最后生成 html 的时候直接按 tab 做了这么个操作:

cnhacktnt@Apollo:proxy$ pod2advent ae_proxy.pod  > ae_proxy.pod


愣了一下,直接就悲剧了啊,还没 ci 到 git 里, 写的东西都没了。。。vim也退出了,连临时文件都没了。。。555,我敲了好几个小时啊。。。!

原文是《使用 AnyEvent::HTTP 的告诉代理验证程序》,现在只剩下代码了,算了,附上代码吧(见附件).

使用方式是,收集一部分待验证的 HTTP 代理地址,按如下格式存成 proxy.txt 文件:


201.75.96.153:3128

76.111.254.51:1111

211.139.10.183:80

78.154.146.173:80

200.52.133.188:8080

85.26.197.206:3128

86.110.154.82:3128

122.72.12.90:80

203.114.146.116:3128

190.201.126.171:8080

202.108.5.114:80

209.115.188.53:80

90.182.144.34:3128

204.188.215.51:3128

69.247.158.186:1586

202.154.4.23:8080

190.5.199.18:3128

123.127.98.170:80

109.75.64.30:3128

64.37.51.144:3128


然后使用如下命令:

cat proxy.txt | perl ae_proxy.pl | tee ,result


就可以看到结果了,验证8000多个代理,耗时28秒。(如果待验证代理数量不足最大并发数,至少也要5秒,因为超时时间为5秒)


哭死!哭死!哭死!

血泪的教训,同学们打命令别太快了。。。。。


--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。



--
Fayland Lam // http://www.fayland.org/

--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

Re: [PerlChina] Re: 写完 Advent Day 4 后,悲剧了。

童鞋要注意经常 git commit or svn ci。

Thanks

2011/12/4 cnhack TNT <cnhacktnt@gmail.com>
原文是《使用 AnyEvent::HTTP 的高速代理验证程序》

55555....


2011/12/4 cnhack TNT <cnhacktnt@gmail.com>
欲哭无泪啊,写了一下午的 Day 4, 最后生成 html 的时候直接按 tab 做了这么个操作:

cnhacktnt@Apollo:proxy$ pod2advent ae_proxy.pod  > ae_proxy.pod


愣了一下,直接就悲剧了啊,还没 ci 到 git 里, 写的东西都没了。。。vim也退出了,连临时文件都没了。。。555,我敲了好几个小时啊。。。!

原文是《使用 AnyEvent::HTTP 的告诉代理验证程序》,现在只剩下代码了,算了,附上代码吧(见附件).

使用方式是,收集一部分待验证的 HTTP 代理地址,按如下格式存成 proxy.txt 文件:


201.75.96.153:3128

76.111.254.51:1111

211.139.10.183:80

78.154.146.173:80

200.52.133.188:8080

85.26.197.206:3128

86.110.154.82:3128

122.72.12.90:80

203.114.146.116:3128

190.201.126.171:8080

202.108.5.114:80

209.115.188.53:80

90.182.144.34:3128

204.188.215.51:3128

69.247.158.186:1586

202.154.4.23:8080

190.5.199.18:3128

123.127.98.170:80

109.75.64.30:3128

64.37.51.144:3128


然后使用如下命令:

cat proxy.txt | perl ae_proxy.pl | tee ,result


就可以看到结果了,验证8000多个代理,耗时28秒。(如果待验证代理数量不足最大并发数,至少也要5秒,因为超时时间为5秒)


哭死!哭死!哭死!

血泪的教训,同学们打命令别太快了。。。。。


--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。



--
Fayland Lam // http://www.fayland.org/

--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

[PerlChina] Re: 写完 Advent Day 4 后,悲剧了。

原文是《使用 AnyEvent::HTTP 的高速代理验证程序》

55555....

2011/12/4 cnhack TNT <cnhacktnt@gmail.com>
欲哭无泪啊,写了一下午的 Day 4, 最后生成 html 的时候直接按 tab 做了这么个操作:

cnhacktnt@Apollo:proxy$ pod2advent ae_proxy.pod  > ae_proxy.pod


愣了一下,直接就悲剧了啊,还没 ci 到 git 里, 写的东西都没了。。。vim也退出了,连临时文件都没了。。。555,我敲了好几个小时啊。。。!

原文是《使用 AnyEvent::HTTP 的告诉代理验证程序》,现在只剩下代码了,算了,附上代码吧(见附件).

使用方式是,收集一部分待验证的 HTTP 代理地址,按如下格式存成 proxy.txt 文件:


201.75.96.153:3128

76.111.254.51:1111

211.139.10.183:80

78.154.146.173:80

200.52.133.188:8080

85.26.197.206:3128

86.110.154.82:3128

122.72.12.90:80

203.114.146.116:3128

190.201.126.171:8080

202.108.5.114:80

209.115.188.53:80

90.182.144.34:3128

204.188.215.51:3128

69.247.158.186:1586

202.154.4.23:8080

190.5.199.18:3128

123.127.98.170:80

109.75.64.30:3128

64.37.51.144:3128


然后使用如下命令:

cat proxy.txt | perl ae_proxy.pl | tee ,result


就可以看到结果了,验证8000多个代理,耗时28秒。(如果待验证代理数量不足最大并发数,至少也要5秒,因为超时时间为5秒)


哭死!哭死!哭死!

血泪的教训,同学们打命令别太快了。。。。。


--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

[PerlChina] 写完 Advent Day 4 后,悲剧了。

#!/usr/bin/env perl
# ae_checkproxy.pl
# cnhacktnt for 2011 perlchina advent

use strict;
use AnyEvent::HTTP;

my $MAXCONN = 1000;

$AnyEvent::HTTP::MAX_RECURSE = 0; # 置0,意思是如果有URL转向发生,直接忽略
$AnyEvent::HTTP::MAX_PER_HOST = $MAXCONN;
# 默认 AnyEvent::HTTP 对同一个主机同时最多只会发起4个连接
# 而我们每次都是访问 www.google.co.jp, 但是是通过大量的代理去访问的,所以为了
# 让我们可以同时测试大量的代理,就把这个值设为和最大并发连接数一样的值就好了

my $target = "http://www.google.co.jp";

my $start = time;

my $cv = AnyEvent->condvar;
# 创建事件的条件变量,你可以把它当成是事件监督员,当我们通过 checkproxy() 创建
# 了大量 HTTP 连接去访问 www.google.co.jp 时,监督员的作用就是确保这些连接在干活
# 的时候,我们的主程序不会提早退出,另外,当所有访问都结束(或超时)后,这个监督员
# 能收到信号,告诉主程序今天的事儿已经全都干完了,可以下班收工了。

checkproxy(*STDIN);
# 从标准输入读取代理服务器地址,开始发起大量 HTTP 请求,这里的请求是非阻塞的,我们
# 可以当这些请求是并发的

$cv->recv;
# 监督员站岗,等待有信号告诉他,所有的请求都结束了(或超时),事儿干完了,可以收工。
# 当执行 $cv->recv 后,主程序就阻塞在这里,等待发出去的 HTTP 请求结束(或超时)。

my $end = time;
print "time: ".($end - $start)."\n";


# 用来通过 HTTP 代理服务器发起 HTTP 请求的子程序
sub checkproxy {
my $fh = shift; # 取得 STDIN 标准输入句柄
while($AnyEvent::HTTP::ACTIVE < $MAXCONN) {
# 如果当前活动连接数小于我们设置的最大并发连接数,我们就继续
# 从 STDIN 里取出待验证的代理服务器地址,并增加 HTTP 请求。
my $proxy = <$fh>;
defined $proxy or last;
$proxy =~ s/\s//g;
next unless $proxy =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}$/;

http_request( # 通过 http_request 发出具体的 HTTP 请求
GET => $target, # 请求类型为 GET,目标URL就是 $target
headers => { "user-agent" => "Mozilla/5.0" },
timeout => 5, # 5秒超时,超过5秒的代理太慢了:-P
proxy => [split(/:/, $proxy)], # 设置要检测的代理服务器地址及端口
on_header => sub {
# 当读到目标服务器返回的头信息时,会触发 on_header 事件
# 这里的 on_header 事件是一个匿名子程序,它的第一个参数
# 就是根据目标服务器返回的头信息所构造的一个哈希表
if ($_[0]{'server'} eq "gws") {
# 如果头信息中 Server 字段是 gws,则当前代理是可用的,否则不行
print "$proxy ok!\n";
} else {
print "$proxy failed!\n";
}
return 0; # 返回0的意思就是立即终止该连接,我们只需要头信息就够了
},
sub { checkproxy($fh) } # 每个 http_request 结束后都会调用这个子程序
# 这样当一个请求结束(或超时)后,我们可以递归地调用 checkproxy() 来
# 立即发起新的请求。
);
}

$cv->send if ($AnyEvent::HTTP::ACTIVE == 0 && eof($fh));
# 如果当前没有活动连接,且没有额外的代理服务器需要验证了,就通过 $cv->send 发送
# 信号,告诉监督员事儿都干完了,可以收工了。
}
欲哭无泪啊,写了一下午的 Day 4, 最后生成 html 的时候直接按 tab 做了这么个操作:


cnhacktnt@Apollo:proxy$ pod2advent ae_proxy.pod  > ae_proxy.pod


愣了一下,直接就悲剧了啊,还没 ci 到 git 里, 写的东西都没了。。。vim也退出了,连临时文件都没了。。。555,我敲了好几个小时啊。。。!

原文是《使用 AnyEvent::HTTP 的告诉代理验证程序》,现在只剩下代码了,算了,附上代码吧(见附件).

使用方式是,收集一部分待验证的 HTTP 代理地址,按如下格式存成 proxy.txt 文件:


201.75.96.153:3128

76.111.254.51:1111

211.139.10.183:80

78.154.146.173:80

200.52.133.188:8080

85.26.197.206:3128

86.110.154.82:3128

122.72.12.90:80

203.114.146.116:3128

190.201.126.171:8080

202.108.5.114:80

209.115.188.53:80

90.182.144.34:3128

204.188.215.51:3128

69.247.158.186:1586

202.154.4.23:8080

190.5.199.18:3128

123.127.98.170:80

109.75.64.30:3128

64.37.51.144:3128


然后使用如下命令:

cat proxy.txt | perl ae_proxy.pl | tee ,result


就可以看到结果了,验证8000多个代理,耗时28秒。(如果待验证代理数量不足最大并发数,至少也要5秒,因为超时时间为5秒)


哭死!哭死!哭死!

血泪的教训,同学们打命令别太快了。。。。。

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

Re: [PerlChina] 2011 CN Perl Advent Day 2 - qr/Moo?/

On 12/02/2011 07:07 PM, cnhack TNT wrote:
> advent.perlchina.org <http://advent.perlchina.org> 谁在管理?能否更新上
> 去啊。。。现在居然跳到某个公司的页面去了。。。
>

现在服务器由 Achilles 提供,我把这个问题和他说了,修复好后就可以看到以前
的 advent 了。

Qiang

>
>
> 2011/12/2 Fayland Lam <fayland@gmail.com <mailto:fayland@gmail.com>>
>
> http://perlchina.github.com/advent.perlchina.org/2011/Moooo.html
>
> =for advent_year 2011
>
> =for advent_day 2
>
> =for advent_title qr/Moo?/
>
> =for advent_author Woosley Xu
>
> 每个人都喜欢面向对象编程,于是每个人都喜欢L<Moose>。但是有些时候,Moose
> 的加载速度成为了我们应用的瓶颈。这时候L<Mouse>出现了,L<Class::Accessor>
> 出现了。但这还不够,L<Mouse>仍然过于沉重,L<Class::Accessor>仍然只能提供
> 有限的特性。这时候,L<Moo>和L<Mo>出现了。
>
> L<Moo>与L<Mouse>最大的区别是:它完全不提供任何B<meta object protocol>,
> 因此它的速度更快,体积更小。在将来的1.0版本,它计划可以和L<Any::Moose>一
> 起使用。
>
> 如果你仍然觉得L<Moo>太过重量级,那么L<Mo>是你的下一个选择。L<Mo>核心只提
> 供B<new>,B<extends>,B<has>这些功能,但你可以按照需求加载你所需要的功能
> 。
>
> =begin code
>
> use Mo qw'build default builder coerce is required';
>
> sub BUILD {
> my $self = shift;
> ...
> }
>
> =end code
>
> 你还可以轻松的将L<Mo>压缩,然后包括到你的模块中去。
>
> =begin code
>
> >cat A.pm
>
> package A;
> # use Mo qw 'build default';
>
> >mo-inline A.pm
>
> >cat A.pm
>
> package A;
> # use Mo qw 'build default';
> # The following line of code was produced from the previous line by
> # Mo::Inline version 0.27
> no
> warnings;my$M=__PACKAGE__.::;*{$M.Object::new}=sub{bless{@_[1..$#_]},$_[0]};*{$M.import}=sub{import
> warnings;$^H|=1538;my($P,%e,%o)=caller.::;shift;eval"no
> Mo::$_",&{$M.$_.::e}($P,\%e,\%o,\@_)for@_;return
> if$e{M};%e=(extends,sub{eval"no
> $_[0]()";@{$P.ISA}=$_[0]},has,sub{my$n=shift;my$m=sub{$#_?$_[0]{$n}=$_[1]:$_[0]{$n}};$m=$o{$_}->($m,$n,@_)for
> sort keys%o;*{$P.$n}=$m},%e,);*{$P.$_}=$e{$_}for
> keys%e;@{$P.ISA}=$M.Object};*{$M.'build::e'}=sub{my($P,$e)=@_;$e->{new}=sub{$c=shift;my$s=bless{@_},$c;my@B;do{@B=($c.::BUILD,@B)}while($c)=@{$c.::ISA};exists&$_&&&$_($s)for@B;$s}};*{$M.'default::e'}=sub{my($P,$e,$o)=@_;$o->{default}=sub{my($m,$n,%a)=@_;$a{default}or
> return$m;sub{$#_?$m->(@_):!exists$_[0]{$n}?$_[0]{$n}=$a{default}->(@_):$m->(@_)}}};@f=qw[build
> default];use strict;use warnings;
>
> =end code
>
> 从 Moose 到 Moo 到 Mo,下一个会是 M ? :)
>
> 谢谢
>
>
> --
> Fayland Lam // http://www.fayland.org/
>
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论
> 组"论坛。
> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
> <mailto:perlchina@googlegroups.com>。
> 要取消订阅此网上论坛,请发送电子邮件至
> perlchina+unsubscribe@googlegroups.com
> <mailto:perlchina%2Bunsubscribe@googlegroups.com>。
> 若有更多问题,请通过
> http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>
>
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
> 要取消订阅此网上论坛,请发送电子邮件至
> perlchina+unsubscribe@googlegroups.com。
> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
> 访问此网上论坛。

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。