2

与这个问题相关,但更深入。我正在运行如下命令:

foreach $dir (@dirs) {
    $cnt = `svn st $dir | wc -l`;
    if($cnt > 0){
        $content .= "$dir\n";
        $mods++;
    }
}

但是,该目录包含非 ASCII 文件,因此当区域设置不正确或未设置时会引发错误。

在 perl 中设置我需要的语言环境的正确方法是

setlocale(LC_CTYPE, 'en_US.UTF-8');

但是,这似乎不会影响svn st命令,因为当 perl 脚本未在具有正确语言环境设置的终端中运行时,仍然会发生语言环境错误。

4

2 回答 2

4

您需要为外部命令设置环境变量:

$cnt = `LC_CTYPE=en_US.UTF-8 svn st $dir | wc -l`;

您还可以更改脚本 ( %ENV) 的环境,这会更改任何子进程的环境:

$ENV{LC_CTYPE} = 'en_US.UTF-8';
于 2012-04-23T15:43:40.110 回答
3

%ENV通过操作哈希为新进程设置环境。

$ENV{LC_CTYPE} = 'en_US.UTF-8';
$cnt = `svn ...`;
于 2012-04-23T15:45:13.483 回答