如何在Perl中创建二维数组?

Alo*_*los 3 arrays perl file matrix multidimensional-array

我目前正在尝试将32 x 48的矩阵文件传递给Perl中的多维数组.我能够访问所有值,但访问特定值时遇到问题.任何帮助将不胜感激.我已经设置了数据集的链接以及我下面的代码.

以下是数据集的链接:http: //paste-it.net/public/x1d5301/

这就是我现在的代码.

#!/usr/bin/perl

open FILE, "testset.txt" or die $!;
my @lines = <FILE>;

my $size = scalar @lines;

my @matrix = (1 .. 32);
my $i = 0;
my $j = 0;
my @micro;

foreach ($matrix)
{

foreach ($lines)
{
    push @{ $micro[$matrix]}, $lines;
}
}
Run Code Online (Sandbox Code Playgroud)

Axe*_*man 7

你似乎并不理解$matrix它只表明@matrix数组索引器后面是什么时候:[ $slot ].否则,$matrix是一个完全不同的变量@matrix(并且两者都不同%matrix).见perldata.

#!/usr/bin/perl
use English;
Run Code Online (Sandbox Code Playgroud)

别!用英语 - 就这样!

这带来了$MATCH,$PREMATCH$POSTMATCH和incurrs可怕的$&,$`,$'罚款.你应该等到你使用英文变量然后导入它.

open FILE, "testset.txt" or die $!;
Run Code Online (Sandbox Code Playgroud)

两件事:1)使用词法文件句柄,2)使用三个arg open.

my @lines = <FILE>;
Run Code Online (Sandbox Code Playgroud)

只要我选择:不要啜饮大文件.(不是这里的情况,但这是一个很好的警告.)

my $size = scalar @lines;

my @matrix = (1 .. 32);
my $i = 0;
my $j = 0;
my @micro;
Run Code Online (Sandbox Code Playgroud)

我看到我们处于"利润!!" 在这里舞台......

foreach ($matrix) {
Run Code Online (Sandbox Code Playgroud)

你没有变量$matrix你有变量@matrix.

    foreach ($lines) {
Run Code Online (Sandbox Code Playgroud)

同样的事情也是如此$lines.

        push @{ $micro[$matrix]}, $lines;
    }
}
Run Code Online (Sandbox Code Playgroud)

改写:

use strict;
use warnings;
use English qw<$OS_ERROR>; # $!
open( my $input, '<', 'testset.txt' ) or die $OS_ERROR;

# I'm going to assume space-delimited, since you don't show
my @matrix;
# while ( defined( $_ = <$input> ))...
while ( <$input> ) {
    chomp; # strip off the record separator
    # load each slot of @matrix with a reference to an array filled with
    # the line split by spaces.
    push @matrix, [ split ]; # split = split( ' ', $_ )
}
Run Code Online (Sandbox Code Playgroud)