如何在 Perl 中打印数组的所有值
Posted
技术标签:
【中文标题】如何在 Perl 中打印数组的所有值【英文标题】:How to print all values of an array in Perl 【发布时间】:2011-03-13 01:21:48 【问题描述】:我正在尝试从 CSV 文件中打印数组的所有值。在下面的示例中,我有点手动执行此操作。无论有多少字段,有人可以向我展示为数组的所有字段执行此操作的代码吗?我基本上只是想在新行上打印每个字段。
#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV_XS;
my $file = 'test.csv';
my $csv = Text::CSV_XS->new (
quote_char => '"',
escape_char => '@',
binary => 1,
keep_meta_info => 0,
allow_loose_quotes => 1,
allow_whitespace => 1,
);
open (CSV, "<", $file) or die $!;
while (<CSV>)
if ($csv->parse($_))
my @columns = $csv->fields();
print "$columns[0]\r\n";
print "$columns[1]\r\n";
print "$columns[2]\r\n";
print "$columns[3]\r\n";
print "$columns[4]\r\n";
print "$columns[5]\r\n";
print "$columns[6]\r\n";
print "$columns[7]\r\n";
else
my $err = $csv->error_input;
print "Failed to parse line: $err";
close CSV;
【问题讨论】:
【参考方案1】:foreach(@columns)
print "$_\r\n";
而不是所有列[数字]。
【讨论】:
【参考方案2】:出于调试目的,Data::Dump
是我的首选武器。它基本上可以漂亮地打印数据结构。
use strict;
use warnings;
use Data::Dump 'dump';
# Do some stuff....
dump @array; # Unlike Data::Dumper, there's no need to backslash ('\@array')
dump %hash; # Same goes for hashes
dump $arrayref;
dump $hashref; # References handled just as well
当然还有很多其他的打印数组的方法:
say foreach @columns; # If you have Perl 5.10+
print $_,"\n" foreach @columns; # If you don't
print "@columns"; # Prints all elements, space-separated by default
“最佳”答案取决于具体情况。你为什么需要它?你在做什么?你要它干什么?然后相应地调整代码。
【讨论】:
【参考方案3】:如果你只想打印以空格分隔的元素:
print @columns;
如果你想更花哨一点,可以使用join
:
print join("\n", @columns);
如果你需要做更多的事情,迭代它:
foreach (@columns)
# do stuff with $_
【讨论】:
我刚刚尝试了join功能,效果也很好。这实际上解决了我正在处理的脚本的另一个方面。非常感谢! 您的join
示例不会在最后一项之后打印换行符。
@mobrule:如果有必要,添加:print join("\n", @columns), "\n";
【参考方案4】:
如果您这样做是为了诊断(而不是演示),您可以考虑 Data::Dumper。在任何情况下,它都是了解您是否想要快速打印或多或少任意数据的好工具。
【讨论】:
【参考方案5】: $"="\n"; print $fh "@files";
【讨论】:
以上是关于如何在 Perl 中打印数组的所有值的主要内容,如果未能解决你的问题,请参考以下文章