在Windows中有一个common problem:在将文件名传递给open()
之前,应将文件名转换为本地代码页。当然,有可能使用Win32::API
,但我不希望我的脚本依赖于平台。目前我必须写下这样的内容:
open IN, "<", encode("cp1251", $filename) or die $!;
但是有没有图书馆隐藏这些细节?我认为可以自动检测本地代码页,所以我只想传递unicode文件名并忘记细节。为什么它仍然不在盒子里?
答案 0 :(得分:5)
使用直到5.8.1才开始工作,然后Jarkko将其取出,并在最顶层的一个令人难以置信的不兼容的更改中打破了-C
转换。这使得Windows成为二等公民并且直到今天都让我很烦,因为任何其他动态语言都没有这种荒谬的缺陷。也许现在是一个好时机,我们可以听到这种变化的理由变得更糟。
无论如何,你想要PerlIO::fse
,但这不是一个完美的解决方案,因为你很快就会自己发现。