Text::CSV perl模块中的方法是

Text::CSV perl模块中的方法是,perl,csv,perl-module,Perl,Csv,Perl Module,我可能遗漏了一些明显的东西,但我有一个非常简单的perl脚本,其中Text::CSV模块中的is_quoted()方法没有按预期工作。代码如下: # cat ./testcsv.pl #!/usr/bin/perl use strict; use Text::CSV; my $csv = Text::CSV->new ( { quote_char => '"' } ) or die "Cannot use CSV: ".Text::CSV->error_di

我可能遗漏了一些明显的东西,但我有一个非常简单的perl脚本,其中Text::CSV模块中的is_quoted()方法没有按预期工作。代码如下:

# cat ./testcsv.pl
#!/usr/bin/perl

use strict;
use Text::CSV;

my $csv = Text::CSV->new ( { quote_char => '"' } )
        or die "Cannot use CSV: ".Text::CSV->error_diag ();

print "Text::CSV version = " . $csv->version() . "\n\n";

my $line = '"text field 111",222,"text field 333",444';

my $status  = $csv->parse($line);
if ($status)
  {
  my $column_idx = 0;
  my @fields = $csv->fields ();
  foreach my $field (@fields)
     {
     my $quoted = $csv->is_quoted ($column_idx);
     $column_idx++;
     print "field #$column_idx: '$field'; quoted = " . ($quoted ? "YES\n" : "NO\n");
     }
  }
下面是我运行脚本时得到的结果:

# perl -v | grep "is perl" This is perl, v5.10.1 (*) built for PA-RISC2.0 # ./testcsv.pl Text::CSV version = 1.29 field #1: 'text field 111'; quoted = NO field #2: '222'; quoted = NO field #3: 'text field 333'; quoted = NO field #4: '444'; quoted = NO # #perl-v | grep“是perl” 这是为PA-RISC2.0构建的perl,v5.10.1(*) #./testcsv.pl 文本::CSV版本=1.29 字段#1:'文本字段111';报价=否 字段#2:'222';报价=否 字段#3:'文本字段333';报价=否 字段#4:'444';报价=否 # 如我们所见,parse()方法正确地将原始字符串分隔为字段,因此我知道Text::CSV已安装并正常工作。从阅读中我了解到,如果指示列中的数据包含在quote_char quotes中,则is_quoted()方法应该返回一个真值。因此,我希望在字段1和3之后看到“是”,因为它们在$line变量的初始化中被清楚地引用。但这并没有发生


我是做错了什么,还是Text::CSV被破坏了?

您需要指定
keep\u meta\u info=>1


顺便说一下,我不喜欢有两个迭代器,所以我会迭代索引

my @fields = $csv->fields();
for my $column_idx (0..$#fields) {
   my $field = $fields[$column_idx];
   ...
}

嗯。谢谢这是正确的答案。非常感谢您这么快的回答,也很抱歉浪费了带宽!(我会投票支持你,但没有足够的声誉这么做。)答案对我来说也不明显。应在文件中提及
是否被引用
。我在测试文件中查找了它,尽管我后来注意到大纲中的示例也使用了
keep\u meta\u info
;但是,在这种情况下,迭代器的范围是:
(0..$#fields-1)
@barush-No,ikegami是正确的$#fields返回数组中元素的最后一个索引,而不是元素的最后一个索引。@barush,
0..$\fields
0..@fields-1
,但不是
0..$\fields-1