Variables
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:
[5] That's another technical term in computer science. (And if it wasn't before, it is now.)
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'}) |
Construct | Meaning |
---|---|
%days
| (Jan => 31, Feb => $leap ? 29 : 28, ...) |
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;