Не похоже, что вы понимаете, что $matrix
указывает на @matrix
, только когда за ним сразу следует индексатор массива: [ $slot ]
.В противном случае $matrix
- это совершенно другая переменная, чем @matrix
(и обе они также отличаются от %matrix
).См. perldata .
#!/usr/bin/perl
use English;
Не! используйте английский - таким образом !
Это приносит$MATCH
, $PREMATCH
и $POSTMATCH
и влечет за собой ужасные $&
, $ `, $'
штраф.Вам следует подождать, пока вы не используете английскую переменную, а затем просто импортировать ее.
open FILE, "testset.txt" or die $!;
Две вещи: 1) использовать лексические файловые дескрипторы, и 2) используйте три арг open
.
my @lines = <FILE>;
Пока я выбираю: не глотайте большие файлы.(Дело не в этом, но это хорошее предупреждение.)
my $size = scalar @lines;
my @matrix = (1 .. 32);
my $i = 0;
my $j = 0;
my @micro;
Я вижу, что мы находимся на "ПРИБЫЛЕ !!" стадии здесь ...
foreach ($matrix) {
У вас нет переменной $matrix
У вас есть переменная @matrix
.
foreach ($lines) {
То же самое верно для $lines
.
push @{ $micro[$matrix]}, $lines;
}
}
Переписать:
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( ' ', $_ )
}