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;
Copyright © 2001 O'Reilly & Associates. All rights reserved.