Not surprisingly, there are three variable types
corresponding to the three abstract data types we mentioned earlier.
Each of these is prefixed by what we call a funny
character.[5] Scalar variables are always named with an initial
$
, even when referring to a scalar that is part of
an array or hash. It works a bit like the English word "the". Thus, we
have:
Construct | Meaning |
---|---|
$days | Simple scalar value $days |
$days[28] | 29th element of array @days |
$days{'Feb'} | "Feb " value from hash
%days |
Note that we can use the same name for $days
,
@days
, and %days
without Perl
getting confused.
There are other, fancier scalar terms, useful in specialized situations that we won't go into yet. They look like this:
Construct | Meaning |
---|---|
${days} | Same as $days but unambiguous before
alphanumerics |
$Dog::days | Different $days variable, in the
Dog package |
$#days | Last index of array @days |
$days->[28] | 29th element of array pointed to by reference
$days |
$days[0][2] | Multidimensional array |
$days{2000}{'Feb'} | Multidimensional hash |
$days{2000,'Feb'} | Multidimensional hash emulation |
Entire arrays (or slices of arrays
and hashes) are named with the funny character @
,
which works much like the words "these" or "those":
Construct | Meaning |
---|---|
@days | Array containing ($days[0], $days[1],…
$days[n]) |
@days[3, 4, 5] | Array slice containing ($days[3], $days[4],
$days[5]) |
@days[3..5] | Array slice containing ($days[3], $days[4],
$days[5]) |
@days{'Jan','Feb'} | Hash slice containing
($days{'Jan'},$days{'Feb'}) |
Any of these constructs may also serve as an lvalue, specifying a location you could assign a value to. With arrays, hashes, and slices of arrays or hashes, the lvalue provides multiple locations to assign to, so you can assign multiple values to them all at once:
@days = 1 .. 7;