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 に答える