I’m trying to initialise a 2D array in Perl that is basically a schedule. So it looks like this:
Time Mon Tue Wed Thu Fri
09:00 0 0 0 0 0
10:00 0 0 0 0 0
11:00 0 0 0 0 0
12:00 0 0 0 0 0
13:00 0 0 0 0 0
14:00 0 0 0 0 0
15:00 0 0 0 0 0
16:00 0 0 0 0 0
17:00 0 0 0 0 0
18:00 0 0 0 0 0
19:00 0 0 0 0 0
20:00 0 0 0 0 0
I read some articles on 2D arrays in Perl but I’m still confused. What’s the easiest way to do this? And please explain a bit so I can get what’s going on.
Take a look at
perllol. It is the best documentation for lists of lists in PerlEssentially, each element of a Perl array can be any scalar value – a string or number, or something more exotic like a subroutine reference or a filehandle reference. To create a 2D array you want an array of arrays, so each element of the base array needs to be an array reference
The
[...]construct creates an anonymous array and returns a reference to it. The anonymous part just means that it has no identifier attached to it like@data, but it exists in memory and can be accessed through its referenceThe syntax for accessing an element of an array through a reference is, for instance,
$array_ref->[0]for the first element. So if I writeI would see
09:00outputFor your data, you can write
So
$data[0]is a reference to an (anonymous) array holding the first line of data, and$data[0]->[0]is'09:00'In addition there is a syntax facility that allows the arrow between any pair of closing and opening brackets to be omitted, so that
$data[0]->[0]may be written as$data[0][0]with exactly the same meaning