在perl中使用3部分打开时"无效参数"

nka*_*aun 7 perl encoding

我对perl非常陌生(以及编程,就此而言)所以如果这只是一个愚蠢的错误,我很抱歉.

我正在尝试编写一个脚本,从.txt文件中提取文件列表,打开每个文件,查找与某些正则表达式匹配的行,并将这些行打印到将生成有效.csv的结构中的新文件文件(使用正则表达式中的捕获组).

我的脚本适用于英文UTF-8文件,但是当它尝试处理非英文文件时,文本数据在每个字母之间显示空格并且正则表达式不匹配 - 我猜这是因为它们保存在UTF中-16.我的想法是将open命令分为三部分,因此它也对非英文文件使用":encoding(UTF-16)"参数,但这导致了无效的参数错误.事实上,如果不使用两部分打开命令,我就无法运行脚本.

这是我的剧本.

use 5.010;
use strict;
use warnings;

use File::Slurp;

my @intfilelist = read_file('filelist_int.txt');

unlink "int_temp.csv";

foreach my $intfile (@intfilelist) {
    open (my $file, "<:encoding(UTF-16)", $intfile) or die "Whoops! $!";
    while (my $line = <$file>) {
        if ($line =~ m/^(\d{3,5})\t(.*)$/) {
            chomp $line;
            open (my $csv, ">>", "int_temp.csv");
            print $csv ("\"$intfile\",\"$1\",\"$2\"\n");
            close $csv;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更改open (my $file, "<:encoding(UTF-16)", $intfile)为open (my $file, $intfile)导致脚本工作,除了上述非英语文件的问题.

就像我说的那样,我只和Perl玩了2天,很抱歉如果我误用了一些术语或忽略了一些明显的东西.感谢任何帮助!

mar*_*erh 9

删除从第一个文件中读取的文件名末尾的换行符File::Slurp.你可以chomp $intfile;在之前做到这一点open.

chomp(参见Perldoc Chomp)从给定字符串的末尾删除换行符.

  • 或者调用:`read_file('filelist_int.txt','chomp'=> 1)` (3认同)