我有以下代码使用Text::CSV:
#!/usr/bin/perl
package main;
use strict;
use warnings;
use Text::CSV;
my $csv = Text::CSV -> new ({ binary => 0, eol => $/ });
open my $io, "<", $file or die "$file: $!";
while (my $row = $csv -> getline ($io))
{
my @fields = @$row;
while(my $field = <@fields>)
{
print $field."\n";
}
}
Run Code Online (Sandbox Code Playgroud)
(改编自Text::CSV文件)
当我@fields在为其分配值后尝试遍历我的数组时@$row,它会分解空格上的值.例如
"FOO","BAR","IM FOO BAR'D"
Run Code Online (Sandbox Code Playgroud)
出来了
FOO
BAR
IM
FOO
BAR'D
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,我该如何解决?
尝试
for my $field (@fields)
Run Code Online (Sandbox Code Playgroud)
代替
while(my $field = <@fields>)
Run Code Online (Sandbox Code Playgroud)
那while句话不符合你的想法.它相当于
while (my $field = glob "@fields")
Run Code Online (Sandbox Code Playgroud)
这不是你的意思.(glob在空格上打破了它的参数,并尝试扩展通配符,匹配磁盘上的文件.你的参数没有任何通配符,所以它最终意义相同split ' ', "@fields").