Ok. Well @table = @data[1..$height]; may not be doing what you expect. If you are unsure about your data structures or are just curious, then you can use Data::Dumper
use Data::Dumper;
$datafile = 'testdata.txt';
chomp $datafile;
open (INPUT, $datafile) || die ("Unable to open $datafile");
@data = <INPUT>;
close INPUT;
@dim = split(/\,/, $data[0]);
$width = $dim[0];
$height = $dim[1];
@table = @data[1..$height];
print Dumper(@table); die;
for($row = 0; $row < $height; $row++) {
for($col = 0; $col < $width; $col++) {
$myString = $myString.$table[$row][$col];
}
$myString ="";
}
@table is not a multi-dimensional array (because of the way you tried to create it). Therefore, there is no such $table[$row][$col]. Each element of @data is a single line of $datafile. @table = @data[1..$height]; is merely creating a new array which contains the same elements as @data.
I don't know exactly know what you are trying to do, but to get access to each byte of each element/row in @table, you can use substr(). You don't need a 2-dimensional array for that:
use strict;
use warnings;
my $datafile = $ARGV[0] || die "File to open was not provided!";
my @data;
open (DATA_FILE, '<', $datafile) || die ("Unable to open $datafile");
@data = <DATA_FILE>;
close(DATA_FILE);
my @dim = split /\,/, $data[0];
my $width = $dim[0];
my $height = $dim[1];
my @table;
push (@table, @data[1..$height]);
my $myString ='';
for(my $row = 0; $row < $height; $row++) {
for(my $col = 0; $col < $width; $col++) {
$myString .= substr($table[$row], $col, 1);
}
$myString ="";
}
|