为什么我的Text :: CSV代码在打印时会在空格上拆分值?

stu*_*221 1 csv perl

我有以下代码使用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)

为什么会发生这种情况,我该如何解决?

cjm*_*cjm 5

尝试

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").