有没有办法在Perl中创建变量数组?

Zes*_*Rex -1 arrays variables perl

所以,我正在尝试再次,现在我被卡住了.

while (<KOERGEBNIS>){
my $counter = 0;
my $curline = $_;

for (my $run = 0; $run < $arrayvalue; $run++){
    if ($curline =~ m/@tidgef[$counter]/){
        my $row = substr($curline, 0, 140);
        push @array$counter, $row;
        print "Row $. was saved in ID: @filtered[$counter]\n";
    }
    $counter++;
}

}
Run Code Online (Sandbox Code Playgroud)

背景是我想在相同的数组中保存以相同的8个字符开头的所有行,这样我就可以计算行数并开始使用这些数组.我现在唯一能想到的就是切换和案例,但我想在将这些代码扔进垃圾之前我会先问.

示例:如果.txt中有一行像这样:

50004000_xxxxxxxxxxxxxx31
50004000_xxxxxxxxxxxxxx33
60004001_xxxxxxxxxxxxxx11
60004001_xxxxxxxxxxxxxx45
Run Code Online (Sandbox Code Playgroud)

我拿了每行的前8个字符并使用uniq过滤重复项并将它们保存在@tidgef数组中,现在我想将@ 1中的Line1和Line2保存在@ array50004000中,甚至更好@ line50004000,将Line4和Line4保存到@ array2或@ array60004001 .

我希望我能很好地解释我的问题!感谢你们

Dav*_*oss 6

你濒临危险地接近一个名为"符号引用"的想法(也称为"使用变量来获取变量的名称").这是一个非常糟糕的主意,对所有 种类原因.

以此为借口来了解Perl中的复杂数据结构是一个更好的主意.你想要对这些数据做什么并不是很清楚,但是这个例子应该让你开始:

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Data::Dumper;

my %lines;

while (<DATA>) {
  chomp;
  my $key = substr($_, 0, 8);
  push @{$lines{$key}}, $_;
}

say Dumper \%lines;

__DATA__
50004000_xxxxxxxxxxxxxx31
50004000_xxxxxxxxxxxxxx33
60004001_xxxxxxxxxxxxxx11
60004001_xxxxxxxxxxxxxx45
Run Code Online (Sandbox Code Playgroud)

  • @Borodin:是的,但是"使用5.010"打字更少.它也有(在我认为有用的)副作用,即阻止人们使用Perl版本,而不是我认为真正的Perl工作的绝对最小值. (3认同)
  • `__DATA__`是一个特殊的标记,可以放在Perl代码的末尾.可以使用`DATA`文件句柄读取该令牌之后的任何内容.因此,正如我所说的,我只是将它用作将样本数据导入测试程序的快速方法.由于你的`KOERGEBNIS`文件句柄有实际数据,你根本不需要使用`DATA`(或`__DATA__`). (2认同)