神奇的Perl-第六个任务(6)
本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载
在WINDOWS控制台中正常运行需要将utf8编码转换成GBK编码,因此单独编写WINDOWS下运行的程序perl4-18-win.pl:
#!c:/perl/bin/perl
#!/usr/bin/perl
#perl4-18-win.pl
# perl4_18_zh为笔者定义的一个模块,导出了一个函数utf2gbk,将UTF8转换为GBK编码
use perl4_18_zh;
my @names;
push (@names,&utf2gbk("李明"));
push (@names,&utf2gbk("李永"));
push (@names,&utf2gbk("黄珏"));
push (@names,&utf2gbk("刘上新"));
#找出所有李姓人名
foreach $name(@names){
$xing=&utf2gbk("李");
print "$name " if ($name=~m/^$xing/);
}
我们编写一个能兼容中文windows和linux字符编码的程序Perl4-18.pl来完成perl4-18-win.pl和perl4-18-linux.pl的功能,部分核心代码如下:
1)判断当前语言环境并放入$bm,UTF8->0,GBK->1
下面,我们编写一个能兼容中文windows和linux系统默认字符编码的程序来完成perl4-18-win.pl和perl4-18-linux.pl的功能。
如何获得当前系统默认编码是否为UTF8呢,我们通过取LANG环境的值来判断。比如:
if (defined($ENV{"LANG"})) {
if ($ENV{"LANG"}=~m/utf(-*)8/i)#UTF8->1,GBK->0
{$bm=1;}
else
{$bm=0;}
}
else
{$bm=0;}
以上代码中,如果当前系统编码是UTF8,$bm为0,否则$bm为1。该程序只在linux和中文windows系统运行,中文windows系统编码一般为GBK,因此当$bm为1时,当前系统编码为GBK。
2)增加人名
push (@names,$bm?&utf2gbk("李明"):"李明");
.........
.................
3) 找出所有李姓人名
my $xing=($bm?&utf2gbk("李"):"李");
print "$name " if ($name=~m/^$xing/);
最后我们把模块perl4_18_zh修改一下,让它能更好地完成任务。
上一篇: Java中的四种引用和引用队列
下一篇: C/C++ Web框架