欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

神奇的Perl-第六个任务(6)

程序员文章站 2022-04-29 16:24:43
...

本神奇的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/);

}

我们编写一个能兼容中文windowslinux字符编码的程序Perl4-18.pl来完成perl4-18-win.plperl4-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修改一下,让它能更好地完成任务。