Hi,

Many thanks for all the feedback about the literals document. 

This new version integrates most of the changes. I've also added a 
subsection about Inf and NaN, directly coming from Michael's  
perlval.

I've also changed the pod syntax to =section, as suggested. I've used 
the:

=section ** 

syntax to specify level, because this is the one I prefer, but I'll 
change this once we agree in the final format.

Comments welcome,

-angel

------------------------------------------------------------------------

=section Literal Values

=section * Literal numbers

=section ** Integers

There are many ways to specify literal numeric values in perl, but 
they default to base 10 for input and output. Once the number has 
been read by perl it becomes just a magnitude. That is it loses all 
trace of the way it was originally represented and is just a number. 
This code for instance prints the literal value 14.

 my $x = 14;  # stores the integer 14 in $x
 print $x;

You can represent the literal value in any other base, using the
C<radix:dddddddd> syntax.

For example:

 my $i = 2:101110;                # binary
 my $j = 3:1210112;               # tertiary
 my $k = 8:1270;                   # octal

Printing these would give 46, 1310, and 696 respectively. When the 
base is greater than 10, there is a need to represent digits that are 
greater than 9.

You can do this in two ways:

=over

=item *

Alphabetic characters: Following the standard convention, perl will 
interpret the A letter as the digit 10, the B letter as digit 11, and 
so on.

 my $l = 16:1E3A7;                 # hexadecimal

=item *

Separating by dots: You can also write each digit in its decimal 
representation, and separate digits using the C<.> character.

 my $m = 256:255.255.255.0;        # 256-base

=back

For example, the integer 30 can be written in hexadecimal base in two 
equivalent ways:

  my $x = 16:1D
  my $x = 16:1.14

These two representations are incompatible, so writing something like 
C<16:D.13> will generate a compile-time error.

Also note that a compile-time error will be generated if you specify a 
"digit" that is larger than your radix can support. For instance,

 my $x = 3:23; # error
 
Finally, you can create negative integers by prepending the C<-> 
character.

For example:

 my $x = 18;
 my $y = -18;

Perl allows the underline character, C<_>, to be placed as a separator 
between the digits of any literal number. You can use this to break 
up long numbers into more readable forms. There aren't any rules to 
it; you can use it however you like: 

 123_456_000.000   (floating point)
 2:0110_1000       (binary)
 16:FF_88_EE       (hexidecimal)

=section ** Floating-Point Numbers

You can use the decimal representation of the number and the standard 
exponental notation.

 my $x = -2.542;
 my $x = 7.823e12;

Perl lets you operate integer numbers with floating-point numbers, so 
the following operation is correct:

 print 3.5 + 2;  # prints 5.5

You can use the C<_> separator too in Floating-Point numbers:

 my $x = 1312512.25;   # floating-poing number
 my $x = 1_312_512.25; # the same

=section ** Pseudo-numbers

The terms C<+Inf> and C<-Inf> represent positive and negative 
infinity; you may sometimes use these to create infinite lists. 

The value C<NaN> ("Not a Number") may be returned by some functions 
or operations to represent that the result of a calculation  (for 
example, division by zero) cannot be represented by a  numeric value. 

=section * Literal strings

Duble quotes or single quotes may be used around literal strings:

 print "Hello, world";
 print 'Hello, world';

However, only double quotes "interpolate" variables and special 
characters such as newlines ("\n"):

  print "Hello, $name\n";     # works fine
  print 'Hello, $name\n';     # prints $name\n literally
     
  my $x = 'world';
  print "Hello, $x";        # Hello, world

You can type any character including newlines and tabs in literal 
strings: 

 my $x = 'Look mum, I can type 
 newlines and   tabs too!';

If you use a Unicode editor to edit your program, Unicode characters 
may occur directly within the literal strings. 

Unicode characters can also be added to a double-quoted string using 
the C<\x{...}> notation. The Unicode code for the desired character, 
in hexadecimal, should be placed in the braces. For instance, a 
smiley face is C<\x{263A}>.  

Perl provides escapes for easily inserting characters that have a 
codepoint below 256:

 print "\xB"  # Hexadecimal - character number 16:xB
 print "\024" # Octal       - character number 8:33

Aditionally, you can use the C<\N{...}> notation and  put the official 
Unicode character name within the braces, such as C<\N{WHITE SMILING 
FACE}>.

See the L<quotes> section for a full explanation of the interpolation 
mechanism and a list of special characters in double-quoted strings.

=section ** String as vector of ordinals

Literals of the form C<v1.2.3.4> are parsed as a string composed of 
characters with the specified ordinals.  This is an alternative, more 
readable way to construct (possibly unicode) strings instead of 
interpolating characters, as in C<\x{1}\x{2}\x{3}\x{4}>. The leading 
C<v> may be omitted if there are more than two ordinals, so C<1.2.3> 
is parsed the same as C<v1.2.3>.


Reply via email to