Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在perl中运行外部命令,同时控制其区域设置?_Perl_Locale - Fatal编程技术网

如何在perl中运行外部命令,同时控制其区域设置?

如何在perl中运行外部命令,同时控制其区域设置?,perl,locale,Perl,Locale,相关但更深入。我运行的命令如下所示: 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'); 但

相关但更深入。我运行的命令如下所示:

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脚本未在设置了正确区域设置的终端中运行时,仍然会发生区域设置错误。

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

$cnt = `LC_CTYPE=en_US.UTF-8 svn st $dir | wc -l`;
您还可以更改脚本的环境(
%ENV
),这将更改任何子进程的环境:

$ENV{LC_CTYPE} = 'en_US.UTF-8';

通过操作
%ENV
散列来设置新进程的环境

$ENV{LC_CTYPE} = 'en_US.UTF-8';
$cnt = `svn ...`;