Perl Config::Tiny->read() не обрабатывает CRLF
Я использую Perl с Ubuntu под Windows 10. Я хочу использовать модуль Perl Config::Tiny для чтения имен файлов и других данных конфигурации. Когда я читаю файл конфигурации, созданный под Windows в Linux, он оставляет возврат каретки в конце значений. В настоящее время я могу обойти это, сделав временную копию файла конфигурации под Linux.
Есть ли способ сказать Config::Tiny->read(), чтобы открыть файл конфигурации с обработкой конца строки, которая делает то, что я хочу?
Вот фрагмент моего текущего кода:
use Config::Tiny;
my $configfile = 'MyScript.ini';
# ; MyScript.ini file looks like:
# [MyScript]
# infilename=Dii.fwdata
# outfilename=Dii.1.fwdata
# logfilename=Dii.ReverseMerge.log
# someotherconfig=xyzzy
say STDERR "read config from:$configfile";
# Windows CRLF nonsense
if ( $^O =~ /linux/) {
`perl -pe 's/\r\n/\n/' < $configfile >/tmp/$configfile `;
}
my $config = Config::Tiny->read($configfile);
my $infilename = $config->{MyScript}->{infilename};
my $outfilename = $config->{MyScript}->{outfilename};
# ... etc,
1 ответ
Решение
Просто передайте crlf
as the "encoding". This will then be used as the open mode:
$Config = Config::Tiny->read( 'file.conf', 'crlf' ); # Neither ':' nor '<:' prefix!