Arrays 如何在perl中以数组形式保存数据?

Arrays 如何在perl中以数组形式保存数据?,arrays,regex,perl,append,Arrays,Regex,Perl,Append,我想以数组的形式在一行中打印每个数据。 我的输入如下所示: Mn1 o1 a ss vs nsvt 0.17 0.02 $$UNI Mn2 o1 b n2 vs nsvt 0.272 0.02 $$UNI Mn3 n2 c ss vs nsvt 0.272 0.02 $$UNI Mp1 o1 a n1 vc svt 0.476 0.02 $$UNI Mp2 n1 b cc vcc xsvt 0.51 0.02 $$UNI Mp3 n1 c cc vc svt 0.51 0.02 $$UNI M

我想以数组的形式在一行中打印每个数据。 我的输入如下所示:

Mn1 o1 a ss vs nsvt 0.17 0.02 $$UNI
Mn2 o1 b n2 vs nsvt 0.272 0.02 $$UNI
Mn3 n2 c ss vs nsvt 0.272 0.02 $$UNI
Mp1 o1 a n1 vc  svt 0.476 0.02 $$UNI
Mp2 n1 b cc vcc xsvt 0.51 0.02 $$UNI
Mp3 n1 c cc vc svt 0.51 0.02 $$UNI
Mibit0e[0].g00.xxx camoutbit0p0 ibit0e[0].bit camblp0y[0] vs svt  
+ 0.068 0.02 
Mibit0e[0].g00.bbb camoutbit0p0 ibit0e[0].bitx camblp0y[0] vc  
+ pvt 0.068 0.02 
Mibit0e[0].g01.qqq camoutbit0p1 ibit0e[0].bit camblp1y[0] vs nsvt  
+ 0.068 0.02 
Mibit0e[0].g01.sss camoutbit0p1 ibit0e[0].bitx camblp1y[0] vc  
+ pxt 0.068 0.02 
a
b
c
a
b
c
ibit0e[0].bit
ibit0e[0].bitx
ibit0e[0].bit
ibit0e[0].bitx
电流输出:

 Mn1 o1 a ss vs nsvt 0.17 0.02 $$UNI
 Mn2 o1 b n2 vs nsvt 0.272 0.02 $$UNI
 Mn3 n2 c ss vs nsvt 0.272 0.02 $$UNI
 Mp1 o1 a n1 vc  svt 0.476 0.02 $$UNI
 Mp2 n1 b cc vcc xsvt 0.51 0.02 $$UNI
 Mp3 n1 c cc vc svt 0.51 0.02 $$UNI
 Mibit0e[0].g00.xxx camoutbit0p0 ibit0e[0].bit camblp0y[0] vs svt  0.068 0.02 
 Mibit0e[0].g00.bbb camoutbit0p0 ibit0e[0].bitx camblp0y[0] vc  pvt 0.068 0.02 
 Mibit0e[0].g01.qqq camoutbit0p1 ibit0e[0].bit camblp1y[0] vs nsvt  0.068 0.02 
 Mibit0e[0].g01.sss camoutbit0p1 ibit0e[0].bitx camblp1y[0] vc  pxt 0.068 0.02 
当我更改为
打印“$p[2]\n”
时,输出如下所示:

Mn3 n2 c ss vs nsvt 0.272 0.02 $$UNI.
但我的预期输出都是第三列中的数据:

a
b
c
a
b
c
ibit0e[0].bit
ibit0e[0].bitx
ibit0e[0].bit
ibit0e[0].bitx
当前代码:

#!/usr/bin/perl
use strict;
use warnings;
my $k;
my $f;
my $a;
my $v;
my @p;
my @a;
my @array;
my $x;
my $h;
my @m;
my @n;
my $p;
open ($f,'<',"test.txt");
while($k = <$f>)
{
chomp $k;
 if ($k=~ m/^M/)
  {
   my @h= split (/\s+/,$k);
   my $h= @h;
  if($h!=9)
   {
   my $v = <$f>;
   $v =~ s/\+//;
   $x = "$k $v";
   push @p,$x;
   }
  else 
   {
  $x = "$k\n";
  push @p,$x;
   }
  }
}
close $f;
print "@p\n";

您可以通过这种方式简化代码

#!/usr/bin/perl
use strict;
use warnings;

open (my $f,'<',"test.txt");
while(my $k = <$f>)
{
    chomp $k;
    print ((split(/\s+/,$k))[2] . "\n") if ($k=~ m/^M/);
}
close $f;
#/usr/bin/perl
严格使用;
使用警告;

如果/^M/'test.txt
打开(我的$f,'看起来像是
perl-lne'print(split()[2]),脚本如何在不同的部分同时读取所有数组?这是因为我的真实脚本将在不同的部分调用某些列。另一个,我仍然希望读取“+”之后的数据并将其附加到上一行。尝试将要保留的输入文件数据加载到数据结构中,其中以
+
开头的行将附加到上一行。然后关闭输入文件,并使用数据结构生成输出。如果遇到问题,这是另一个问题。
#!/usr/bin/perl
use strict;
use warnings;

my @data;
open (my $f,'<',"test.txt");
while(my $k = <$f>) {
    chomp $k;
    if ($k =~ /^M/) {
        push(@data, $k);
    }
    elsif($k =~ /^\+(.+)/) {
        $data[-1] .= $1;
    }
    else {}
}
close $f;
foreach my $line (@data) {
    print ((split(/\s+/,$line))[2] . "\n");
}