小编Mar*_*nce的帖子

在Perl中如何将unicode参数传递给外部命令?

这个问题的根本原因是我试图为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)

unicode perl openbsd solaris utf-8

7
推荐指数
1
解决办法
1579
查看次数

标签 统计

openbsd ×1

perl ×1

solaris ×1

unicode ×1

utf-8 ×1