2014年12月6日星期六

[PerlChina] PerlChina Advent 06: Milla

# Milla


[CPAN](https://metacpan.org/) 是 Perl 的骄傲。我想每个使用 Perl 的人心里都有对社区回馈的想法,这里我们将使用 [Milla](https://metacpan.org/release/Dist-Milla) 和其他一些流行的服务来构建一个完整地模块流程。


## 安装 Milla


    $ cpanm Dist::Milla


Milla 是一个 [Dist::Zilla](https://metacpan.org/release/Dist-Zilla) 的优秀合集。所以它所依赖的模块有点多。因为 dzil/milla 是一个工具,启动时间不是很重要,所以它们都使用了 [Moose](https://metacpan.org/pod/Moose)


## 配置个人偏好


    $ milla setup


输入名字,电邮和喜欢的版权,PAUSE 账号。它会将信息存放在 ~/.dzil/config.ini


## 创建项目


    $ milla new Acme-CPANAuthors-Chinese

    $ cd Acme-CPANAuthors-Chinese


该命令创建了一个模块目录,然后里头做了 git init,构建了基本的文件如下:


    Changes

    cpanfile

    dist.ini

    lib

    lib/Acme

    lib/Acme/CPANAuthors

    lib/Acme/CPANAuthors/Chinese.pm

    t

    t/basic.t


这大致上就是您所需要工作的所有文件。其他的比如 Makefile.PL, MANIFEST, README 等,milla 会在 build 或者 release 时自动构建。


## 开始真正工作


 * cpanfile - 模块所依赖的模块。比如这里我们需要加入行

        requires 'Acme::CPANAuthors';

 * Changes - 将您做的改动放到 {{$NEXT}} 的下一行。{{$NEXT}} 会在发布时自动更新版本号和发布时间

 * lib/Acme/CPANAuthors/Chinese.pm - 主模块。

 * t/ - 测试文件。


## 额外服务


### Git


您需要一个开源的版本号来放置您的代码,这样方便大家如果发现问题可以 fork 然后给您发送补丁。推荐使用 [GitHub](https://github.com/)


当您创建一个 repo 后,在命令行下:


    $ git remote add origin https://github.com/user/repo.git

    $ git commit -am "blabla"

    $ git push


来放置您的代码。更多的 git 使用可以参考 Pro Git 免费中文书。


### Travis


[Travis](https://travis-ci.org/) 是一个免费的测试服务器。可以使用 GitHub 账号登陆,然后在 https://travis-ci.org/profile 对该 repo 启用服务。


### Coveralls


[Coveralls](https://coveralls.io/) 是一个测试代码覆盖率的服务。同样使用 GitHub 登陆,然后对该 repo 启动服务。


### 额外代码


启用服务后,我们需要一个通用的 .travis.yml 来指定测试内容


    $ cat .travis.yml

    language: perl

    perl:

        - "5.18"

        - "5.16"

        - "5.14"

        - "5.12"

        - "5.10"

    before_install:

        - "cpanm --installdeps ."

        - "cpanm Devel::Cover::Report::Coveralls"

    script:

      perl Makefile.PL && make test && cover -test -report coveralls


另外我们这里需要用 Makefile.PL, 所以修改下 dist.ini


    $ cat dist.ini

    [@Milla]

    installer = MakeMaker


    [GitHubREADME::Badge]

    badges = travis

    badges = coveralls


[GitHubREADME::Badge](https://metacpan.org/pod/Dist::Zilla::Plugin::GitHubREADME::Badge) 是一个 Dist::Zilla 的插件用来显示 Travis/Coveralls 的 Badge.


## 发布代码


 * 发布之前您需要做下测试


        $ milla test


当然 prove -lr t/ 也是可以的。


 * 激动人心的时候来了,发布从来没有如此简单过:


        $ milla release


然后我们就成功发布了该模块。


 * 来清除创建的额外目录。


        $ milla clean


 * 打包文件,我自己去 [PAUSE](https://pause.perl.org/) 上传


        $ milla build


## 总结


为什么 Milla 要比其他的好,那是因为 Milla 可以让我们专注于您所需要专注的地方:


 * 您无须关心 Makefile.PL MANIFEST LICENSE META.* 是什么了和做什么了

 * 您无须更新所有的模块的版本号了。

 * 您无须更新 Changes 发布的时间了。

 * 您无须做 git tag 了

 * Travis 可以直接测试您的模块,在不同版本的 perl 下

 * Coveralls 告诉您模块的测试代码覆盖率,好好考虑下您应该尽量多写测试了


尝试一下,您会喜欢它的。


另外完整的代码在 [https://github.com/PerlChina/Acme-CPANAuthors-Chinese](https://github.com/PerlChina/Acme-CPANAuthors-Chinese)


## 作者

[Fayland Lam](http://fayland.me/)


http://advent.perl-china.com/calendar/2014/06/

--
您收到此邮件是因为您订阅了Google网上论坛上的"PerlChina Mongers 讨论组"群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此群组,请发送电子邮件至perlchina@googlegroups.com
访问此群组:http://groups.google.com/group/perlchina
要查看更多选项,请访问https://groups.google.com/d/optout

2014年12月5日星期五

Re: [PerlChina] PerlChina Advent 05: Perl Tricks

BTW, we got a website: http://advent.perl-china.com/

Thanks

On Fri Dec 05 2014 at 4:42:30 PM chenlin rao <rao.chenlin@gmail.com> wrote:
# 分享几个Perl小技巧

##  interpolate function calls into printed strings

Perl string 中可以使用变量,如

    my $var = $object->method($argument);
    print "the output is : $var, please verify";

这个$var 只用了一次,能否省去呢?比如换成如下写法?

    print "the output is : $object->method($argument), please verify";

不行,不过有间接的方法,

    print "the output is : ${\ $object->method($argument) }, please verify";
`
或者,

    print "the output is : @{[ $object->method($argument) ]}, please verify";

参考



## The non-destructive modifier /r

The non-destructive modifier s///r causes the result of the substitution to be returned instead of modifying $_
 (or whatever variable the substitute was bound to with =~ ):

    $x = "I like dogs.";
    $y = $x =~ s/dogs/cats/r;
    print "$x $y\n"; # prints "I like dogs. I like cats."

这一段直接从perlrequick 中抄过来的。

参考



## cron jobs 中使用 perlbrew

perlbrew 很好用,我使用perlbrew 很久以后,才发现可以这样用。

    0 23  * * * /path/to/perlbrew exec --with perl-5.20.0 perl /path/to/app.pl > /dev/null

## 后记

这是我最近才发现的原来可以这样用的小技巧。欢迎分享你的发现,谢谢

## 作者

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

--
您收到此邮件是因为您订阅了Google网上论坛上的"PerlChina Mongers 讨论组"群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此群组,请发送电子邮件至perlchina@googlegroups.com
访问此群组:http://groups.google.com/group/perlchina
要查看更多选项,请访问https://groups.google.com/d/optout

[PerlChina] PerlChina Advent 05: Perl Tricks

# 分享几个Perl小技巧

##  interpolate function calls into printed strings

Perl string 中可以使用变量,如

    my $var = $object->method($argument);
    print "the output is : $var, please verify";

这个$var 只用了一次,能否省去呢?比如换成如下写法?

    print "the output is : $object->method($argument), please verify";

不行,不过有间接的方法,

    print "the output is : ${\ $object->method($argument) }, please verify";
`
或者,

    print "the output is : @{[ $object->method($argument) ]}, please verify";

参考



## The non-destructive modifier /r

The non-destructive modifier s///r causes the result of the substitution to be returned instead of modifying $_
 (or whatever variable the substitute was bound to with =~ ):

    $x = "I like dogs.";
    $y = $x =~ s/dogs/cats/r;
    print "$x $y\n"; # prints "I like dogs. I like cats."

这一段直接从perlrequick 中抄过来的。

参考



## cron jobs 中使用 perlbrew

perlbrew 很好用,我使用perlbrew 很久以后,才发现可以这样用。

    0 23  * * * /path/to/perlbrew exec --with perl-5.20.0 perl /path/to/app.pl > /dev/null

## 后记

这是我最近才发现的原来可以这样用的小技巧。欢迎分享你的发现,谢谢

## 作者

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

2014年12月4日星期四

Re: [PerlChina] PerlChina Advent Day 1

jfried 刚说他看到这篇advent了~

在 2014年12月2日 下午9:03,Ken Lam <bi.ken.lam@gmail.com>写道:
感谢!!!

于 14/12/2 上午10:39, Fayland Lam 写道:
Rexify

=for advent_year 2014

=for advent_day 1

=for advent_title Rexify

=for advent_author Chenlin Rao

=encoding utf8

Perl 一直以来都是系统管理员们的好朋友。早在L<09 年的 advent Day 5|../../2009/05/SSHBatch.pod> 上,就介绍过一个 Perl 工具叫 L<SSH::Batch>。随着时代变迁,更完备的集群架构管理工具 Puppet、SaltStack、Ansible 等大行其道。在这方面,Perl 社区也出现了新的项目,这就是 (R)?ex 项目。

(R)?ex 项目的设计以配置管理和部署为核心。这个 (R)? ,可以是 SSH 到远程主机,可以是直接到本地主机,也可以是调用 API 控制各大云平台。

(R)?ex 本身的 DSL 设计,是仿照了 Puppet 的语法。(作者本身是德国一位 IDC 运维,本身手上也有 Puppet 环境)

=head2 资源定义语法示例

=begin code

user "ubuntu";
group frontend => "frontend[01..05]";
sudo TRUE;

desc "Prepare Frontend Server";
task "prepare", group => "frontend", sub {
  pkg "apache2",
    ensure => "latest";

  service "apache2",
    ensure => "started";
};

desc "Keep Configuration in sync";
task "configure", group => "frontend", sub {
  prepare();

  file "/etc/apache2/apache2.conf",
    source    => "files/etc/apache2/apache2.conf",
    on_change => sub { service apache2 => "reload"; };
};

=end code

非常一目了然,之前没用过的人也可以一眼看懂这段配置是要干嘛——安装最新的 apache 软件包,启动 apache 服务,传输本地的 "files/etc/apache2/apache2.conf" 到远程主机的 "/etc/apache2/apache2.conf",然后重载 apache 服务。

=head2 即时运行

如果 Rex 止于这种程度,那么我就建议大家直接使用 Puppet 好了。Puppet 的一个问题:无法即时生效。在 Rex 中,实际就是一个很类似之前 SSH::Batch 的用法:

=begin code

$ rex -qw -H "frontend[01..15] middleware[01..05] db[01..04]" -e "say run 'uptime'"

=end code

=head2 云平台 API

云平台,其实也就是一种 Rex 内部资源,所以其使用方式跟普通的 pkg/file/service/cron/ps/tail 等资源并无不同:

=begin code

use Rex::Commands::Cloud;

user "root";
public_key "/path/to/your/just/created/amazon-public.key";
private_key "/path/to/your/just/downloaded/amazon-private-key.pem";

my $access_key = "your-access-key";
my $secret_access_key = "your-secret-key";

cloud_service "Amazon";
cloud_auth "$access_key", "$secret_access_key";

task "create", sub {
   cloud_instance create => { 
            image_id => "ami-02103876",
            name     => "static01",
            key      => "dev-test",
         };
};

=end code

大家可能注意到上面配置中多了一行 C<use Rex::Commands::Cloud>,事实上大家可以任意自己扩展 Rex::Commands 接口,实现自己的资源(名字空间叫 Rex::Commands 而不是 Rex::Resources,倒也可以说明 Rex 的实质,依然是一个命令执行式的工具)。

事实上,Rex 有专门的 modules.rexify.org 来收集发布各种第三方资源。之前,就有国内的朋友制作了 Rex::Commands::Zabbix2 模块。

=head2 web 界面

任何自动化工具最终都会走向 web 界面展示。Rex 最近用 Mojolicious 框架完成了官方的 JobControl 界面。这里就不占用篇幅了,大家可以自行访问官网文档:L<http://www.rexify.org/howtos/jobcontrol/create_project.html>

最后值得说明的是:Rex 官网有中文同步翻译,地址见 L<http://rex.perl-china.com>

http://perlchina-advent.herokuapp.com/calendar/2014/01/


Thanks
--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访 问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

[PerlChina] PerlChina Advent 04: DDP & DDS

# DDP & DDS

Perl 里要查看变量内部的实际内容,有很多种选择。比如核心模块 [Data::Dumper](https://metacpan.org/pod/Data::Dumper), [Smart::Comments](https://metacpan.org/pod/Smart::Comments) 都是被推荐了多年的模块。不过这里要介绍的,是另外两个在某些场景下更好用的模块。

## Data::Printer

[Data::Printer](https://metacpan.org/pod/Data::Printer) 模块在 metacpan 上获得近 80 个赞,比老牌的 Data::Dumper 还多 20 个。用起来非常简单:

    $ perl -MDDP -MHTTP::Tiny -E 'p new HTTP::Tiny'
    HTTP::Tiny  {
        public methods (11) : agent, delete, get, head, mirror, new, post, post_form, put, request, www_form_urlencode
        private methods (18) : __ANON__, _add_basic_auth_header, _agent, _create_proxy_tunnel, _http_date, _maybe_redirect, _open_handle, _parse_http_date, _prepare_data_cb, _prepare_headers_and_cb, _proxy_connect, _request, _set_proxies, _split_proxy, _split_url, _update_cookie_jar, _uri_escape, _validate_cookie_jar
        internals: {
            agent          "HTTP-Tiny/0.047",
            keep_alive     1,
            max_redirect   5,
            no_proxy       [],
            timeout        60,
            verify_SSL     0
        }
    }

[DDP](https://metacpan.org/pod/DDP) 是 Data::Printer 特意提供的缩写别名模块,实际用法是一样的。可以看到,它的 `p` 函数能把变量的类型,以及对象的方法和属性,都分门别类的输出出来!相信一定会给觉得 Perl 面向对象编程的人很大帮助。

## Data::Dump::Streamer

[Data::Dump::Streamer](https://metacpan.org/pod/Data::Dump::Streamer) 模块相对低调的多。不过这个模块也有自己的用武之地:

    $ perl -MData::Dump::Streamer -MHTTP::Tiny -E 'Dump(sub{"test"})'
    $CODE1 = sub {
               use feature 'current_sub', 'evalbytes', 'fc', 'say', 'state', 'switch', 'unicode_strings', 'unicode_eval';
               'test';
             };

Data::Dump::Streamer 模块其实也提供了一个缩写别名叫 `DDS`。不过默认并不开启,需要在编译模块的时候,多加一个指定参数才行:

    $ perl Build.PL DDS && ./Build install

试图过用 Data::Dumper 来输出匿名函数引用的都有惨痛的回忆,那么,最后,你们猜用上面的 DDP 看函数引用,用下面的 DDS 看对象标量,结果又分别会是怎样呢?

## 作者


--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

2014年12月3日星期三

[PerlChina] PerlChina Advent 03: unidecode

# unidecode

虽然 Unicode 已经非常流行,但是有时候在某些场景下,您不得不使用 ASCII 来作为输出。比如

  * 短消息 SMS,某些短消息网关不支持 Unicode
  * 文件名重命名
  * 不知道输入是什么语言,但需要转成能稍微看懂的
  * 等等

这时候您可以使用 [Text::Unidecode](https://metacpan.org/pod/Text::Unidecode) 来帮忙。

    use utf8;
    use Text::Unidecode;
    print unidecode("Léon & møøse\n"); # Leon & moose
    print unidecode("您好"); # Nin Hao
    print unidecode("こんにちは"); # konnitiha

该模块对于某些字符可能支持不够完美,这时候你可以简单地写一个 wrap,参考该模块 [POD](https://metacpan.org/pod/Text::Unidecode) 文档。

## Usage

一个将目录下所有中文名的文件转成对应拼音的脚本:

    use Text::Unidecode;
    use Encode;

    opendir(my $dir, "/some/where/from_dir");
    my @files = grep { -f $_ } readdir($dir);
    closedir($dir);

    foreach my $file (@files) {
        my $to_file = unidecode(decode_utf8($file));
        $to_file =~ s/\s+/\_/g;
        next if $to_file eq $file;

        print "$file -> $to_file\n";
        # do a copy
    }

输入结果大致为:

    夜空中最亮的星.mp3 -> Ye_Kong_Zhong_Zui_Liang_De_Xing_.mp3

## 作者
[Fayland Lam](http://fayland.me/)

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

2014年12月2日星期二

Re: [PerlChina] PerlChina Advent Day 1

感谢!!!

于 14/12/2 上午10:39, Fayland Lam 写道:
Rexify

=for advent_year 2014

=for advent_day 1

=for advent_title Rexify

=for advent_author Chenlin Rao

=encoding utf8

Perl 一直以来都是系统管理员们的好朋友。早在L<09 年的 advent Day 5|../../2009/05/SSHBatch.pod> 上,就介绍过一个 Perl 工具叫 L<SSH::Batch>。随着时代变迁,更完备的集群架构管理工具 Puppet、SaltStack、Ansible 等大行其道。在这方面,Perl 社区也出现了新的项目,这就是 (R)?ex 项目。

(R)?ex 项目的设计以配置管理和部署为核心。这个 (R)? ,可以是 SSH 到远程主机,可以是直接到本地主机,也可以是调用 API 控制各大云平台。

(R)?ex 本身的 DSL 设计,是仿照了 Puppet 的语法。(作者本身是德国一位 IDC 运维,本身手上也有 Puppet 环境)

=head2 资源定义语法示例

=begin code

user "ubuntu";
group frontend => "frontend[01..05]";
sudo TRUE;

desc "Prepare Frontend Server";
task "prepare", group => "frontend", sub {
  pkg "apache2",
    ensure => "latest";

  service "apache2",
    ensure => "started";
};

desc "Keep Configuration in sync";
task "configure", group => "frontend", sub {
  prepare();

  file "/etc/apache2/apache2.conf",
    source    => "files/etc/apache2/apache2.conf",
    on_change => sub { service apache2 => "reload"; };
};

=end code

非常一目了然,之前没用过的人也可以一眼看懂这段配置是要干嘛——安装最新的 apache 软件包,启动 apache 服务,传输本地的 "files/etc/apache2/apache2.conf" 到远程主机的 "/etc/apache2/apache2.conf",然后重载 apache 服务。

=head2 即时运行

如果 Rex 止于这种程度,那么我就建议大家直接使用 Puppet 好了。Puppet 的一个问题:无法即时生效。在 Rex 中,实际就是一个很类似之前 SSH::Batch 的用法:

=begin code

$ rex -qw -H "frontend[01..15] middleware[01..05] db[01..04]" -e "say run 'uptime'"

=end code

=head2 云平台 API

云平台,其实也就是一种 Rex 内部资源,所以其使用方式跟普通的 pkg/file/service/cron/ps/tail 等资源并无不同:

=begin code

use Rex::Commands::Cloud;

user "root";
public_key "/path/to/your/just/created/amazon-public.key";
private_key "/path/to/your/just/downloaded/amazon-private-key.pem";

my $access_key = "your-access-key";
my $secret_access_key = "your-secret-key";

cloud_service "Amazon";
cloud_auth "$access_key", "$secret_access_key";

task "create", sub {
   cloud_instance create => { 
            image_id => "ami-02103876",
            name     => "static01",
            key      => "dev-test",
         };
};

=end code

大家可能注意到上面配置中多了一行 C<use Rex::Commands::Cloud>,事实上大家可以任意自己扩展 Rex::Commands 接口,实现自己的资源(名字空间叫 Rex::Commands 而不是 Rex::Resources,倒也可以说明 Rex 的实质,依然是一个命令执行式的工具)。

事实上,Rex 有专门的 modules.rexify.org 来收集发布各种第三方资源。之前,就有国内的朋友制作了 Rex::Commands::Zabbix2 模块。

=head2 web 界面

任何自动化工具最终都会走向 web 界面展示。Rex 最近用 Mojolicious 框架完成了官方的 JobControl 界面。这里就不占用篇幅了,大家可以自行访问官网文档:L<http://www.rexify.org/howtos/jobcontrol/create_project.html>

最后值得说明的是:Rex 官网有中文同步翻译,地址见 L<http://rex.perl-china.com>

http://perlchina-advent.herokuapp.com/calendar/2014/01/


Thanks
--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访 问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

2014年12月1日星期一

Re: [PerlChina] perl北京聚会——2014年12月7日

我注册了一个meetup组: http://www.meetup.com/Beijing-Perl-Mongers/events/219013814/ meetup.com是目前比较流行的一个平台,喜欢聚会分享的可以注册一下看看咯。时不时可能就能看到其他感兴趣的东西有个聚会在离你不远的地方……

ps:注册的时候别用 163.com 邮箱,好像垃圾邮件过多被 meetup.com 拒了。

在 2014年12月2日 上午11:40,Achilles Xu <formalin14@gmail.com>写道:
嗨,各位:

本周末北京举行个perl小聚会。主要由三斗讲一下elasticsearch的ELK套件。其他演讲尚未确定,欢迎自荐。剩下的是讨论环节。欢迎大家参加。

时间:12月7日14:00 —— 18:00
地点:北京市朝阳区中远幸福大厦A座14层   (地铁10号线亮马桥站出来,往北走一点(约300米),路西就是。)
联系人: Achilles Xu   18611952631

最好能先跟邮件或贴报名,当然也欢迎空降。


Achilles Xu
formalin14@gmail.com



--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
通过以下网址访问此论坛:http://groups.google.com/group/perlchina
要查看更多选项,请访问 https://groups.google.com/d/optout

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

Re: [PerlChina] perlchina的注记

https://www.linkedin.com/jobs2/view/19087283

morgan 上海 最近还在招人,我在jobs.perl.org 也看到过。

2014-08-26 5:34 GMT-07:00 Dongxu Ma <dongxu.ma@gmail.com>:
说到商业公司的话,您漏掉了2家当初比较有名的:摩根士丹利和亚马逊。这两家公司是当初借着Perl5的流行把自己的公司IT搭建起来的。我在前者工作了7年,因为个人也爱好这门语言,对摩根士丹利里Perl5的发展情况也是蛮了解的,里面随处可见Perl的踪影。High Order Perl的序言里也阐述了Hildo代表大摩的帮助。大摩自从在上海落户开发中心以来,也在上海开辟了一部分和Perl相关的职位,间接推动了这门语言在国内的发展。最近公司还有在招聘这方面的职位。


2014-08-25 16:04 GMT+08:00 Liu Yubao <yubao.liu@gmail.com>:
好怀旧。

如果ParrotVM能火起来,这还是很好玩的,但感觉这货没啥指望的样子。Perl 6么,随它去吧。喜欢Perl的话Perl 5才是精髓,Perl 6完全是另一个东西,可恨还顶着Perl的名号,败坏!

Perl在国内的普及应该很大程度归功于Learning Perl第四版的翻译,初看此书惊为天物。以及Linux的普及,流行时间跟Linux进入中国差不多,九九年前后。但随着Python和Java普及, Perl渐入下风。

在流行期间,BBS起了推波助澜的作用,我当年混水木的,现在还不时去灌灌。

感觉语言的流行必须有商业公司大力推动,或者创始人非常牛逼,忽悠能力超好。

On Friday, August 22, 2014, Yisong Zhen <zhenyisong@gmail.com> wrote:

以下内容会在我的blog上发表,有历史知情者或者提供其他线索的人士,请与我联系。


Perl作为一种计算机语言,早在1987年由美国人Larry Wall创建。这段历史以及Larry的个人自传都可以从维基百科得到。随后的阶段,荷兰人Rossum1989)创建了Python。加拿大人Gosling1990)创建了Java。日本人松本行弘(1995)年创建Ruby。丹麦人Lerdorf1995)创建了PHP。之前,RitchieThompson1971)创建了C语言,也就是我在大学从谭浩强那本书学到的。中国人至今还在不停地学习各种语言。

Perl在业界的流行程度有比较,最近的RedMonk ranking的排名是第11位,勉强在第一方阵吧。RedMonk的样本主要采集于GitHubStackoverflow。当然,有可能出现样本偏差,例如Github更注重新的语言,而早期的Perl或者Java都放在Sourceforge上面,Stackoverflow则反映的更多的是语言的技术难度。此外,黑客经常使用的技术、公司招募的条件、相关计算机语言的书籍销量以及GOOGLE的查询频率,这些都能体现目前计算机语言的"流行"程度。总之,Perl的趋势是在下滑,而且有脱离第一方阵的倾向,这个结论可以参考TIOBE-IndexPerl的最高点大约是2005年,随后开始下滑(目前来看,Java仍旧是排名靠前,C++C是开发者和雇主的偏爱)。

在中国,由于yahoo中国的退出,Perl似乎在国内衰落了。由于Perl语言的创造者Larry Wall来北京, PerlChina组织的最近一次讨论会大约有30人参加。有幸和老Larry合影。Larry认为Perl语言可以实施"freewill",这是哲学层面的比较。我的浅薄知识可能无法领会Larry的这个说法。毫无疑问,上帝具有"free will",而对于人类,这个命题是否成立,目前仍存在争论。我目前是这么认为,曾经一种流行的CGI语言,被强有力的新挑战者替代。

不过,我一直存疑的问题是,Perl是如何进入中国的?Larry1987年将Perl1.0发布到comp.sources.misc新闻组,那时中国互联网还处于雏形,应该最早出现于中科院高能物理所。Perl4最后结束的时间是19941994年中国的互联网才与国际的互联网沟通。那时我才刚进入大学。因此,Perl是最早在高校流传,还是业余的爱好者首先推广,是官方还是民间自发的选择?由于我的学识有限,所以这个问题有待进一步的考证。但我粗浅的了解,Perl在中国的普及应该是民间自发的,没有学校和官方的组织和身影。而PerlChina组织应该是Perl在中国普及的一个基石和探索。

PerlChina实际上是Perl在中国普及的一个民间缩影。它似乎成立于2001年冬天。有一名计算机语言爱好者Tsingson注册了现有的域名(不过,现在的域名持有者是Qiang,可以通过whois查询这段历史的遗迹)。我在采访PerlChina的诸位前辈的时候,我的一个问题就是:"什么时候想要建立一个PerlChina的组织?当时的动机是什么?"。然而就是这个简单的问题,现在也无法考证,也可能是时间久远,记忆的片段更加模糊,很难确切地描述当时的动机。但肯定的是,PerlChina是非盈利性机构,当然,每次PerlChina的大会,都有网络公司的慷慨解囊,或为之提供场地或免费提供午餐。

Perl-China曾经的站长,包括:chunzi,曾在2001-2003年主持Perlchina的站点管理工作。Chunzi退出管理后,目前从事的工作仍和Perl相关,在公司工作中仍然全面使用Perl语言开发、维护公司的项目。 Hoowa(网名)是2003-2004年参与PerlChina的站点管理的。Hoowa目前不再参与Perl的中国推广活动。目前他所在的公司也少部分利用Perl来完成一些项目。当然,他目前的工作与Perl的关系不大,这似乎是他完全退出PerlChina的原因之一。曾经的参与者:Nomas2004年底-2010年),由于工作紧凑,所以辞去站长的职责,但工作中仍然用到Perl。目前的维护者是AchillesPerlChina站长的交接工作是自然而然的,没有特别的行政指令或者出于个人利益的诉求,这种自发的传承使得PerlChina的运行处于小众而稳定的状态。   

根据回忆,早期Perl的实践者包括:Boysss(?)四川省某工厂厂长,爱好写代码,曾在电脑报撰写文章。据chunzi回忆,他最早期接触Perl实际上是来自于boysss的翻译工作。6y6(六月六)翻译PerlCGI文档。Netawk,福建省硬件工程师。花斑猪,Perl计数器的开发。华炼,曾在yahoo中国工作,开发网络商店;小林(斗牛士),全名林兴华,曾在瀛海威和锐讯工作过,曾参与移动互联网的开发;飞云小侠,据说毕业于北大,曾参与网络旅游。我想,早期实践者的踪迹已经很难寻觅到了,Perl究竟是如何扩散的,很难找到源头。

不过,我觉得类似于美国篮球职业联赛,应该建立中国Perl名人堂,评价的唯一标准是对Perl的深层理解和应用。当然,我浅薄的知识还无法判断,有佛头著粪之嫌。在我的其启发下,我采访的其中几位PerlChina的站长提名了若干人,但是我随后的考虑,觉得这种方式不太妥当,我既不是江湖上的百晓生,也没有能力评价中国Perl的程序员。只能拾人牙慧,而且很容易引起不必要的误解。不过,PerlChina应该有自己的名人堂,用以激励后来的Perl使用者,并向Perl发展起到重要贡献的程序员致敬。

如果有更多的公司愿意招聘Perl程序员,那么Perl的发展肯定是无可限量的。目前采用Perl作为开发工具的有这么几家大的公司,如英国广播公司(BBC),互联网电影资料库(IMDB),Craigslist等等。Quora上曾经有一个帖子是关于Perl有哪些大的公司使用。Vicky BrasseurGitHub发布了一个数据库,用来搜集目前使用Perl的公司。国内我几乎不太了解。Achilles给我的一封信指出,目前 国内蓝汛、乐看网、音悦台、若比邻、阿里、去哪儿、DeNA等在采用Perl语言,而PerlChina在此方面做得工作乏善可陈。我想,执着的兴趣和高位数的薪金,将绝对促进Perl在国内的发展和普及。现在Perl几乎边缘化了。

 

对于历史的回顾,我对于Perl在中国以及PerlChina的历史仍有很多疑点。比如,与台湾相比,Perl为什么没有在大陆地区发展起来(这个问题是chunzi提出的)?原因是什么?我们和欧美的差距具体在哪里?有哪些成功的经验可以移植?又有哪些中国本土的文化可以借用,从而通过PerlChina推动Perl在中国的发展?CPAN上有多少模块是大陆Perl爱好者提供的作品?下载量是多少?还有哪些Perl的前辈和传奇人物应该在名人堂内以及如何界定这种遴选标准?当然,还有很多细节有待考证,例如,PerlChina组织的全国性会议有几次?会议地点和人数?谁是赞助商?有哪些人士参与会议的组织?有多少人通过PerlChina找到了工作?

本文主要采访了PerlChina历史上的站长,根据他们的回忆并蒙许可将主要内容通过我的博客发布。如有历史上的知情者,请一定联系我。

 

 

附件-采访时的部分问题:

为什么您将Perl的工作转移给别人,是放弃Perl在中国的推广了?

您现在的工作是什么?还用Perl吗?还会关注Perl的发展吗?

交接工作的原则是什么?

你知道还有哪些官方或者是民间的Perl的推广计划吗?

您能介绍还有哪些Perl的前辈或者是传奇人物?

Perl是如何在中国传播的?是自发的还是有组织的?从高校开始还是民间的网络高手?

如何查询来自大陆地区贡献的CPAN的作品?


--
//---------------------------------------------------------------------------------------
//   We have a hunger of the mind which asks for knowledge
//   of all around us, and the more we gain, the more is
//   our desire; the more we see, the more we are capable
//   of seeing.
//---------------------------------------------------------------------------------------
@
YiSong Zhen, Ph.D

State Key Laboratory of Cardiovascular Disease,
Fuwai Hospital & Cardiovascular Institute,
Chinese Academy of Medical Sciences,
Peking Union Medical College,
Beijing 100037, Beilishilu 167
P.R.China
http://www.cardiosignal.org
Tel: 86-10-60866105 (lab)
@----------------------------------------------------------------------------------------

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout



--
-Dongxu

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

Re: [PerlChina] PerlChina Advent Day 1

使用rex,可能会遇到一个问题:
如何获得命令行参数? 参考。




2014-12-01 18:39 GMT-08:00 Fayland Lam <fayland@gmail.com>:
Rexify

=for advent_year 2014

=for advent_day 1

=for advent_title Rexify

=for advent_author Chenlin Rao

=encoding utf8

Perl 一直以来都是系统管理员们的好朋友。早在L<09 年的 advent Day 5|../../2009/05/SSHBatch.pod> 上,就介绍过一个 Perl 工具叫 L<SSH::Batch>。随着时代变迁,更完备的集群架构管理工具 Puppet、SaltStack、Ansible 等大行其道。在这方面,Perl 社区也出现了新的项目,这就是 (R)?ex 项目。

(R)?ex 项目的设计以配置管理和部署为核心。这个 (R)? ,可以是 SSH 到远程主机,可以是直接到本地主机,也可以是调用 API 控制各大云平台。

(R)?ex 本身的 DSL 设计,是仿照了 Puppet 的语法。(作者本身是德国一位 IDC 运维,本身手上也有 Puppet 环境)

=head2 资源定义语法示例

=begin code

user "ubuntu";
group frontend => "frontend[01..05]";
sudo TRUE;

desc "Prepare Frontend Server";
task "prepare", group => "frontend", sub {
  pkg "apache2",
    ensure => "latest";

  service "apache2",
    ensure => "started";
};

desc "Keep Configuration in sync";
task "configure", group => "frontend", sub {
  prepare();

  file "/etc/apache2/apache2.conf",
    source    => "files/etc/apache2/apache2.conf",
    on_change => sub { service apache2 => "reload"; };
};

=end code

非常一目了然,之前没用过的人也可以一眼看懂这段配置是要干嘛——安装最新的 apache 软件包,启动 apache 服务,传输本地的 "files/etc/apache2/apache2.conf" 到远程主机的 "/etc/apache2/apache2.conf",然后重载 apache 服务。

=head2 即时运行

如果 Rex 止于这种程度,那么我就建议大家直接使用 Puppet 好了。Puppet 的一个问题:无法即时生效。在 Rex 中,实际就是一个很类似之前 SSH::Batch 的用法:

=begin code

$ rex -qw -H "frontend[01..15] middleware[01..05] db[01..04]" -e "say run 'uptime'"

=end code

=head2 云平台 API

云平台,其实也就是一种 Rex 内部资源,所以其使用方式跟普通的 pkg/file/service/cron/ps/tail 等资源并无不同:

=begin code

use Rex::Commands::Cloud;

user "root";
public_key "/path/to/your/just/created/amazon-public.key";
private_key "/path/to/your/just/downloaded/amazon-private-key.pem";

my $access_key = "your-access-key";
my $secret_access_key = "your-secret-key";

cloud_service "Amazon";
cloud_auth "$access_key", "$secret_access_key";

task "create", sub {
   cloud_instance create => { 
            image_id => "ami-02103876",
            name     => "static01",
            key      => "dev-test",
         };
};

=end code

大家可能注意到上面配置中多了一行 C<use Rex::Commands::Cloud>,事实上大家可以任意自己扩展 Rex::Commands 接口,实现自己的资源(名字空间叫 Rex::Commands 而不是 Rex::Resources,倒也可以说明 Rex 的实质,依然是一个命令执行式的工具)。

事实上,Rex 有专门的 modules.rexify.org 来收集发布各种第三方资源。之前,就有国内的朋友制作了 Rex::Commands::Zabbix2 模块。

=head2 web 界面

任何自动化工具最终都会走向 web 界面展示。Rex 最近用 Mojolicious 框架完成了官方的 JobControl 界面。这里就不占用篇幅了,大家可以自行访问官网文档:L<http://www.rexify.org/howtos/jobcontrol/create_project.html>

最后值得说明的是:Rex 官网有中文同步翻译,地址见 L<http://rex.perl-china.com>

http://perlchina-advent.herokuapp.com/calendar/2014/01/


Thanks

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

[PerlChina] perl北京聚会——2014年12月7日

嗨,各位:

本周末北京举行个perl小聚会。主要由三斗讲一下elasticsearch的ELK套件。其他演讲尚未确定,欢迎自荐。剩下的是讨论环节。欢迎大家参加。

时间:12月7日14:00 —— 18:00
地点:北京市朝阳区中远幸福大厦A座14层 (地铁10号线亮马桥站出来,往北走一点(约300米),路西就是。)
联系人: Achilles Xu 18611952631

最好能先跟邮件或贴报名,当然也欢迎空降。


Achilles Xu
formalin14@gmail.com



--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
通过以下网址访问此论坛:http://groups.google.com/group/perlchina
要查看更多选项,请访问 https://groups.google.com/d/optout

[PerlChina] PerlChina Advent Day 02

# Lingua::Identify::CLD

[Lingua::Identify::CLD](https://metacpan.org/pod/Lingua::Identify::CLD) 使用 Chrome 的语言识别功能来得到文字或者网页的语言。

它的使用超级简单

    use Lingua::Identify::CLD;

    my $cld = Lingua::Identify::CLD->new();
    my @lang = $cld->identify("Text"); # 'ENGLISH', 'en', 100, 1
    # $lang[0] -> language name
    # $lang[1] -> language id
    # $lang[2] -> confidence
    # $lang[3] -> is_reliable (bool)

## 适用场景

 * 判断某网页 url 是哪国语言,类似 Google Chrome 的判断

        use LWP::Simple;
        use Lingua::Identify::CLD;
        my $cld = Lingua::Identify::CLD->new(isPlainText => 0);
        my @langs = $cld->identify(get('http://www.163.com/'));
        print join(", ", @langs); # CHINESE, zh-CN, 97, 1

## 命令行

*identify-cld*

    ➜  mojo-advent git:(master) ✗ cat articles/2014/02/Lingua-Identify-CLD.md | identify-cld
    STDIN: CHINESE

## 作者
[Fayland Lam](http://fayland.me/)


Thanks

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

[PerlChina] PerlChina Advent Day 1

Rexify

=for advent_year 2014

=for advent_day 1

=for advent_title Rexify

=for advent_author Chenlin Rao

=encoding utf8

Perl 一直以来都是系统管理员们的好朋友。早在L<09 年的 advent Day 5|../../2009/05/SSHBatch.pod> 上,就介绍过一个 Perl 工具叫 L<SSH::Batch>。随着时代变迁,更完备的集群架构管理工具 Puppet、SaltStack、Ansible 等大行其道。在这方面,Perl 社区也出现了新的项目,这就是 (R)?ex 项目。

(R)?ex 项目的设计以配置管理和部署为核心。这个 (R)? ,可以是 SSH 到远程主机,可以是直接到本地主机,也可以是调用 API 控制各大云平台。

(R)?ex 本身的 DSL 设计,是仿照了 Puppet 的语法。(作者本身是德国一位 IDC 运维,本身手上也有 Puppet 环境)

=head2 资源定义语法示例

=begin code

user "ubuntu";
group frontend => "frontend[01..05]";
sudo TRUE;

desc "Prepare Frontend Server";
task "prepare", group => "frontend", sub {
  pkg "apache2",
    ensure => "latest";

  service "apache2",
    ensure => "started";
};

desc "Keep Configuration in sync";
task "configure", group => "frontend", sub {
  prepare();

  file "/etc/apache2/apache2.conf",
    source    => "files/etc/apache2/apache2.conf",
    on_change => sub { service apache2 => "reload"; };
};

=end code

非常一目了然,之前没用过的人也可以一眼看懂这段配置是要干嘛——安装最新的 apache 软件包,启动 apache 服务,传输本地的 "files/etc/apache2/apache2.conf" 到远程主机的 "/etc/apache2/apache2.conf",然后重载 apache 服务。

=head2 即时运行

如果 Rex 止于这种程度,那么我就建议大家直接使用 Puppet 好了。Puppet 的一个问题:无法即时生效。在 Rex 中,实际就是一个很类似之前 SSH::Batch 的用法:

=begin code

$ rex -qw -H "frontend[01..15] middleware[01..05] db[01..04]" -e "say run 'uptime'"

=end code

=head2 云平台 API

云平台,其实也就是一种 Rex 内部资源,所以其使用方式跟普通的 pkg/file/service/cron/ps/tail 等资源并无不同:

=begin code

use Rex::Commands::Cloud;

user "root";
public_key "/path/to/your/just/created/amazon-public.key";
private_key "/path/to/your/just/downloaded/amazon-private-key.pem";

my $access_key = "your-access-key";
my $secret_access_key = "your-secret-key";

cloud_service "Amazon";
cloud_auth "$access_key", "$secret_access_key";

task "create", sub {
   cloud_instance create => { 
            image_id => "ami-02103876",
            name     => "static01",
            key      => "dev-test",
         };
};

=end code

大家可能注意到上面配置中多了一行 C<use Rex::Commands::Cloud>,事实上大家可以任意自己扩展 Rex::Commands 接口,实现自己的资源(名字空间叫 Rex::Commands 而不是 Rex::Resources,倒也可以说明 Rex 的实质,依然是一个命令执行式的工具)。

事实上,Rex 有专门的 modules.rexify.org 来收集发布各种第三方资源。之前,就有国内的朋友制作了 Rex::Commands::Zabbix2 模块。

=head2 web 界面

任何自动化工具最终都会走向 web 界面展示。Rex 最近用 Mojolicious 框架完成了官方的 JobControl 界面。这里就不占用篇幅了,大家可以自行访问官网文档:L<http://www.rexify.org/howtos/jobcontrol/create_project.html>

最后值得说明的是:Rex 官网有中文同步翻译,地址见 L<http://rex.perl-china.com>

http://perlchina-advent.herokuapp.com/calendar/2014/01/


Thanks

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout

2014年11月30日星期日

[PerlChina] 2014年12月14日上海地区Perl爱好者聚会

各位,

上海地区Perl爱好者好久没有聚会了,计划在2014年12月14日10点到13点办一次Perl 爱好者聚会,把上海地区的Perl活动恢复起来。本次活动的内容主要是大家认识一下。基本消费是50元,包括茶和中午的一份快餐。特别欢迎还在上学的同学参加,可以免单。

活动地点基本定在上海体育场 4号地铁站附近,同时方便浦西和浦东的朋友。

请有意参加本次活动的Perl 爱好者通过邮件 xu.hejun@163.com 联系我。

请在邮件中告知 姓名和手机号,方便及时通知活动信息。

我会在或者活动前三天通知活动的具体地址。

另外,也请在perlchian.org上有帐号的朋友将本信息转发到perlchina.org 的上海版上,让更多上海朋友知道。

-Jack

--
您收到此邮件是因为您订阅了Google网上论坛中的"PerlChina Mongers 讨论组"论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到perlchina+unsubscribe@googlegroups.com
要发帖到此论坛,请发送电子邮件至perlchina@googlegroups.com
通过http://groups.google.com/group/perlchina访问此论坛。
要查看更多选项,请访问https://groups.google.com/d/optout