如何在 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 中打印数组的所有值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用随机值生成数组,而不使用循环?

如何将数组作为值存储在 Perl 哈希中?

perl 一次检查所有值

如何在 Perl 中将重复值添加到数组中?

如何对 Perl 哈希值进行排序并相应地对键进行排序(可能在两个数组中)?

从 perl 数组/哈希打印信息