- 论坛徽章:
- 0
|
本帖最后由 死水站 于 2015-01-05 09:33 编辑
事情是这样的:
自从用了神一般的use open ":encoding(gbk)", ":std";再没遇到什么大问题 (.pl是utf8写的,需要读取的文本和控制台都是gbk)
结果昨天发现,主函数调用子函数,子函数传回的$,在主函数中可以say,可以>进文件,都是正常文字;但是在子函数中say那些$时,就显示\{XXXX} not map to cp936,子函数中也有那句use open ":encoding(gbk)", ":std";啊,该加的都加了,咋回事?
另外,发现子函数中不能写入文件?给我提示“Can't use string ("TXT2") as a symbol ref while "strict refs"”,(TXT2是句柄名字)。
哪位知道,给解答下?
=================自问自答
花了一个晚上测试,终于发现原因,
针对主程序调用子程序,放在不同的.pl里,只要主函数加上use open ":encoding(gbk)", ":std";即可,子函数say一个含中文字串的变量将正常显示;但是,要say到一个.txt时,需要加上encode(),写成“say $句柄 encode("gbk", $输出变量);”,这样输出文件也正常。
第二个问题,zhlong8 已经回答过,用 my $句柄的形式好过一个大写常量
记录报告写了两张纸,测试了不同情况,太多就不打上来了。 |
|