如何在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 ...`;