这个问题的根本原因是我试图为Perl 的新选项/参数处理模块(OptArgs)编写测试.这当然涉及@ARGV根据这个问题的答案解析我正在做的事情.这适用于定义了I18N :: Langinfo :: CODESET的系统[1].
在langinfo(CODESET)没有可用的系统上,我希望至少根据观察到的行为尽最大努力.但是到目前为止我的测试表明,有些系统我甚至无法正确地将unicode参数传递给外部脚本.
我已经设法在各种系统上运行类似下面的内容,其中"test_script"是一个仅执行以下操作的Perl脚本print Dumper(@ARGV):
use utf8;
my $utf8 = '¥';
my $result = qx/$^X test_script $utf8/;
Run Code Online (Sandbox Code Playgroud)
我发现在FreeBSD上test_script接收的字节可以解码为Perl的内部格式.但是在OpenBSD和Solaris上,test_script似乎得到的字符串"\x{fffd}\x{fffd}"只包含unicode替换字符(两次?).
我不知道qx运营商背后的机制.我认为它要么exec是炮弹,要么炮轰,但不像文件句柄(我可以将它们用于编码),我不知道如何确保它能够满足我的需求.与此相同system().所以我的问题是我上面没有正确做什么?否则与Perl或OpenBSD和Solaris上的shell或环境有什么不同?
[1]实际上我认为到目前为止根据CPAN测试人员的结果只有Linux.
更新(x2):我目前通过cpantester的设置运行以下方法来测试Schwern的假设:
use strict;
use warnings;
use Data::Dumper;
BEGIN {
if (@ARGV) {
require Test::More;
Test::More::diag( "\npre utf8::all: "
. Dumper( { utf8 => $ARGV[0], bytes => $ARGV[1] } ) );
}
}
use utf8;
use …Run Code Online (Sandbox Code Playgroud)