[Perl脚本]把整站所有文件由GB转化成utf-8的Perl脚本

This is a SiteLog of Easun's WebBlog.。
恩。和国际接轨吧。 虽然我的Website基本上全是 utf-8 编码的,但是还是有部分是 gb2312 的。懒得一点一点修改,找Perl吧。
代码如下:

#!/usr/bin/perl -w
#
# GB->utf By Easun(路杨)
# http://easun.org
#
use strict;
use warnings;
use CGI();
my $cgi= new CGI;
use CGI::Carp qw(fatalsToBrowser); #打开浏览器检错,不需要请删除之。
use Encode qw/from_to/;
#WebSite的变量设置

#转化的原始路径:
my $mydir ='/webdata/perl'; #没有'/'
#要生成的转化完毕的文件存放路径。如果和上面路径相同就是覆盖
my $myoutdir ='/webdata/perl_new'; #没有'/'

print $cgi->header(-charset=>'utf-8');
&dodir($mydir,$myoutdir);
print 'That is all OK!';
exit;

sub dodir
{
my ($mydir,$outdir) =@_;
unless (-e $outdir) { mkdir ($outdir, 0777) ;}

opendir(DIR, $mydir);
my @files = readdir(DIR);
close(DIR);
print '<div><h3>当前目录:'.$mydir.'</h3><h3>目标目录:'.$outdir.'....</h3>';
for (0 .. $#files)
{
my $name = $files[$_];
next if $name eq '.';
next if $name eq '..';

if (-d $mydir.'/'.$name)
{
&dodir($mydir.'/'.$name,$outdir.'/'.$name);
next;
}
# 开始当前文件
print '<ul><li>开始转换'.$mydir.'/'.$name.'....</li>';
open(FILE, $mydir.'/'.$name);
my @data = <FILE>;
close(FILE);
my $data = join("", @data);
if ($data =~ /charset\=gb2312/) { $data =~ s/charset\=gb2312/charset\=utf-8/s; }
from_to($data, "gbk", "utf8");
open(FILE, ">$outdir/$name");
print FILE $data;
close(FILE);
print '<li>'.$outdir.'/'.$name.'convert success!</li></ul>';
# 结束
}
print '</div>';
}
1;

注意: 由于懒惰,我没有判断文件是否是文本性质(html或者xml,php,cgi,pl,js)的就全部转化了,也没有判断是否需要转化(即已经是utf-8编码),你可自己添加判断或者你使用生成新文件的办法,或者保证目录下面全部是需要转化的,不然,万一你的目录下面有图片文件或者zip.rar等2进制文件被转化了可就麻烦了哦:)