2006-10
02

今天客户发过来一个bug报告,说发送邮件时内容中书写はぁ~,收信时会显示成はち。 懂日文的朋友大概能明白,感叹词はぁ~怎么就变成了蜜蜂はち呢?

后来找到了原因。我们的邮件系统是用 Perl 写成的。其中有一个空格删除功能, 就是在显示时将邮件中的全角空格全部删除,其实现方法如下:

$body =~ s/ //g;

看起来似乎没有问题,但就是这条语句将はぁ~变成了はち。日文 euc-jp 编码下, 这几个字符串的编码如下:

字符串编码
はぁ~A4CF A4A1 A1C1
はちA4CF A4C1
全角空格A1A1

的后半个字符和的前半个字符恰好都是 A1,所以就被删除了,于是就出现了有意思的乱码现象。 修改方法也比较简单,只要正确识别出每个汉字的起止位置即可。

my $twoBytes   = '[\x8E\xA1-\xFE][\xA1-\xFE]';
my $threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
while($body =~ s/\G(($twoBytes|$threeBytes|[\x00-\x7F])+?) /$1/g){};  # 识别汉字,如果汉字后面有空格则删除
$body =~ s/^ //g;        # 最后删除最开始处的全角空格


2006-10
01

本文参考了 mod_perl 的官方文档之一, 但并不是原文档的翻译。

阅读全文 »

2006-09
28

如何在Linux下创建这样一个程序,执行之后返回shell,但程序本身驻留在内存之中继续执行?其实很简单,创建一个子进程,然后父进程结束即可。例如下面的Perl程序:

#!/usr/bin/perl
exit if fork();       # 创建子进程,然后父进程退出
while (1) { sleep 1; }       # 测试用死循环

不过需要考虑到一点,守护进程通常在系统启动时以root身份启动,但是由于安全问题,通常并不以root身份运行。这一点使用perl如何实现呢?可以使用下面的 sudo 函数。

sub sudo {
    my ($user, $group) = @_;
    my $uid = (getpwnam($user))[2];
    my $gid = (getgrnam($group))[2];
    ($(, $)) = ($gid, "$gid $gid");
    ($<, $>) = ($uid, $uid);
}

所以,一个基本的守护程序应当这样写:(sudo函数代码省略)

#!/usr/bin/perl
&sudo("myuser", "mygroup");     # myuser、mygroup为启动守护进程的用户和组
exit if fork();
while (1) { sleep 1; }


2006-08
31

本文介绍了在Windows下安装Apache、PHP、mod_perl、mod_python、subversion的方法。
阅读全文 »


2006-08
29

安装环境:win32,ActivePerl 5.8

C:\> ppm
ppm> install http://theoryx5.uwinnipeg.ca/ppms/mod_perl.ppd

ActivePerl 5.8用的PPM packages可以在这个网站下载:

可以利用 repo 命令添加repository。

ppm> repo add "uwinnipeg Perl 5.8 repository" http://theoryx5.uwinnipeg.ca/cgi-bin/ppmserver?urn:/PPMServer58


2006-06
23

平常使用Vim作为编辑器的人都会有一种特殊的习惯,使得他们使用其他编辑器时觉得很不顺手。ThunderBird是很好用的邮件程序,不过它的编辑器的功能比较弱。这里的方法可以让你使用Vim作为ThunderBird的编辑器。

首先要为ThunderBird安装External Edit插件,通过它可以使用其他程序编辑邮件。重新启动ThunderBird之后,打开“工具→扩展”菜单,选中刚刚安装好的External Edit插件,单击“选项”按钮打开设置界面。

在Text Editor栏里面输入 gvim 所在的位置,例如“"C:\Program Files\Vim\vim70\gvim.exe" -f -c "set encoding=utf-8"”。-f 参数使得 Vim 在编辑结束之前不返回ThunderBird,这样ThunderBird才能正常接收到Vim编辑的内容。注意要选中下面的“This editor handles Unicode”选项。然后关闭该对话框,回到Thunderbird中,新建邮件,然后在编辑邮件的界面的工具栏中单击右键选择“自定义”,将External Edit按钮拖到工具栏上。

这样我们就做好了设置。以后新建邮件或者回复邮件时,单击工具栏上的External Edit按钮即可打开Vim进行编辑,编辑结束之后退出Vim,编辑内容就会反映到ThunderBird中。

阅读全文 »

2006-03
25

1. 安装Apache ( http://httpd.apache.org) )和 ActiveState Perl (http://www.activestate.com/ )。

2. 安装mod_perl。

ppm install http://theoryx5.uwinnipeg.ca/ppmpackages/mod_perl.ppd

安装完毕之后会提示输入Apache的路径,输入类似于 D:/Apache2/modules。

3. 配置mod_perl。修改httpd.conf,增加以下几行:

LoadFile "C:/Perl/bin/perl58.dll"
LoadModule perl_module modules/mod_perl.so

<Files *.cgi>
    SetHeader perl-script
    PerlHandler ModPerl::PerlRun
    Options +ExecCGI
</Files>

4. 重新启动Apache。