如果你提出清单论点,你会以 wise智的方式把第一个名单附在其余名单之后。 阅读。 因此,请你打电话push(@table,@row);
正在制作一个更长的<代码>@table清单,而不是两个层面阵列。
您收到了若干职位,这些职位把名单的参考资料推到@row
,作为@row
,将编制一个行文清单,实际上,该行将制作。 我倾向于这样做。 当然,与Perl一样,这样做总是有另一种方式。
顺便提一下,你还可以把匿名阵列引入名单的缩略部分,以编制多层面清单。 了解Perl提及情况的最重要方面是:1)它们是小数,2)它们可以提及Perl——代码、阵列、洗衣——中的任何内容。 Spend some time with the Perl Ref Tutorial , 这将变得更加明确。 根据您的代码,仅添加[ ]
,围绕您希望成为名单上第2个方面的内容,即push(table,@row);
应为push(table, [@row]);
。 在同一意义上,你将<代码>[ ]围绕您的分部分排列,使之成为<编码>push(@table,[分成/s*,s*/,_美元]);。 这将同时进行分裂,并由此形成一个匿名阵列。
如何制作和查阅多方面名单,在Tom Christensen s perllol tutorial也得到了很好的处理。 本文直接阐述了你在法典中解决具体问题的办法。
改写《你法典》与《手法》中的手法,成为:
#!/usr/bin/perl
use strict;
use warnings;
my (@row, @table, $n, $rowref);
while(<DATA>) {
chomp;
# regex to separate CSV (use of a cpan module for CSV STRONGLY advised...
@row = /(?:^|,)("(?:[^"]+|"")*"|[^,]*)/g;
for (@row) {
if (s/^"//) { s/"$//; s/""/"/g; }
}
push(@table, [ @row ]); #Note the [ ] around the list
}
# Now the table is created, print it:
my $rowcnt=0;
foreach $rowref (@table) {
print "row $rowcnt:
";
$rowcnt++;
print " [ @$rowref ],
";
}
# You can access the table in the classic [i][j] form:
for my $i ( 0 .. $#table ) {
$rowref = $table[$i];
$n = @$rowref - 1;
for my $j ( 0 .. $n ) {
print "element $i, $j of table is $table[$i][$j]
";
}
}
# You can format it:
for my $i ( 0 .. $#table ) {
print "$table[$i][0] $table[$i][1]
";
print "$table[$i][2]
";
print "$table[$i][3], $table[$i][4] $table[$i][5]
";
}
__DATA__
Mac,Doe,120 jefferson st.,Riverside, NJ, 08075
Jack,McGinnis,220 hobo Av.,Phila, PA,09119
"John ""Da Man""",Repici,120 Jefferson St.,Riverside, NJ,08075
Stephen,Tyler,"7452 Terrace ""At the Plaza"" road",SomeTown,SD, 91234
,Blankman,,SomeTown, SD, 00298
"Joan ""Joan, the bone""",Jett,"9th, at Terrace plc",Desert City,CO,00123