[Perl Other] Perl的CGI环境奇怪的问题
转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]
本文链接: http://www.php-oa.com/2009/08/13/perl-cgi-utf8.html
写了个小东西.在perl中使用open来打开一个shell的程式.但发现怎么样也不正常,经过很长时间的研究,发现对中文不行.才发现Perl有CGI的环境时,很多环境变量都不同了.
后来在shlle下测试了很久,发现是LANG在做怪,默认perl在apache的CGI调用下是LANG=C.
#!/usr/bin/perl -w
use CGI qw/:standard/;
use strict;
print header(-charset=>'utf-8');
print start_html(-title=>'videoinfo');
#$ENV{"LANG"} = 'en_US.UTF-8';
print p($ENV{"LANG"});
open INFO,"/usr/bin/mediainfo /tmp/测试.ts 2>&1 |" || die "print p($?)";
while(<INFO>){
print p("$_");
}
system("env >/tmp/d");
print end_html;
如上,后来又加了一条$ENV{"LANG"} = ‘en_US.UTF-8′;还是不好用,奇怪啦.
使用system,重定向shell的环境变量时,才发现.原来就算在perl中的LANG改变了,在CGI的环境中也不会改变Shell的环境变量.没法子,只能在open加载时来加入语言环境.
open INFO,"export LANG=en_US.UTF-8 \&\& /usr/bin/mediainfo /tmp/测试.ts 2>&1 |" || die "print p($?)";
只能先这样啦,如果各位有更加好的建议,麻烦告诉我.
另外,对apache也有新的了解.httpd中可以修改perl的环境变量
PassEnv 指令传送shell中的环境变量 PassEnv LANG
SetEnv 指令设置CGI环境变量 SetEnv LANG en_US.UTF-8
测试过了,可惜在我这种应用中无效.



















不错不错,以前写CGI,经常被CGI的header搞死,
我的MSN:zzxia-01@hotmail.com,可以加你吗
我现在在学习perl,但是不知道是方法不对还是什么问题,感觉老是学不会。您能不能写个perl的学习方法,给新手有点帮助 谢谢!
我也写得不好,你多写写就会了。