Whether it's named directly or indirectly, and whether it's in a variable, or an array element, or is just a temporary value, a scalar always contains a single value. This value may be a number, a string, or a reference to another piece of data. Or, there might even be no value at all, in which case the scalar is said to be undefined. Although we might speak of a scalar as "containing" a number or a string, scalars are typeless: you are not required to declare your scalars to be of type integer or floating-point or string or whatever.
Perl stores strings as sequences of characters, with no
arbitrary constraints on length or content. In human terms, you don't
have to decide in advance how long your strings are going to get, and
you can include any characters including null bytes within your
string. Perl stores numbers as signed integers if possible, or as
double-precision floating-point values in the machine's native format
otherwise. Floating-point values are not infinitely precise. This is
important to remember because comparisons like
1/3*10) tend to fail mysteriously.
Perl converts between the various subtypes as needed,
so you can treat a number as a string or a string as a number, and
Perl will do the Right Thing. To convert from string to number, Perl
internally uses something like the C library's
atof (3) function. To convert from
number to string, it does the equivalent of an
sprintf (3) with a format of
%.14g" on most machines. Improper ...