10,000 of your items. This isn't supposed to happen.
You can preallocate space for a hash by assigning to the keys() function.
-This rounds up the allocated bucked to the next power of two:
+This rounds up the allocated buckets to the next power of two:
keys(%users) = 1000; # allocate 1024 buckets
0xff # hex
0377 # octal
0b011011 # binary
- v102.111.111 # string (made of characters "f", "o", "o")
String literals are usually delimited by either single or double
quotes. They work much like quotes in the standard Unix shells:
substitution; single-quoted strings are not (except for C<\'> and
C<\\>). The usual C-style backslash rules apply for making
characters such as newline, tab, etc., as well as some more exotic
-forms. See L<perlop/"Quote and Quotelike Operators"> for a list.
+forms. See L<perlop/"Quote and Quote-like Operators"> for a list.
Hexadecimal, octal, or binary, representations in string literals
(e.g. '0xff') are not automatically converted to their integer
print "The price is $Price.\n"; # interpreted
As in some shells, you can enclose the variable name in braces to
-disambiguate it from following alphanumerics. You must also do
+disambiguate it from following alphanumerics (and underscores).
+You must also do
this when interpolating a variable into a string to separate the
variable name from a following double-colon or an apostrophe, since
these would be otherwise treated as a package separator:
for representing Unicode strings, and for comparing version "numbers"
using the string comparison operators, C<cmp>, C<gt>, C<lt> etc.
If there are two or more dots in the literal, the leading C<v> may be
-omitted. Such literals are accepted by both C<require> and C<use> for
+omitted.
+
+ print v9786; # prints UTF-8 encoded SMILEY, "\x{263a}"
+ print v102.111.111; # prints "foo"
+ print 102.111.111; # same
+
+Such literals are accepted by both C<require> and C<use> for
doing a version check. The C<$^V> special variable also contains the
running Perl interpreter's version in this form. See L<perlvar/$^V>.
down from the door where it began.
FINIS
+If you use a here-doc within a delimited construct, such as in C<s///eg>,
+the quoted material must come on the lines following the final delimiter.
+So instead of
+
+ s/this/<<E . 'that'
+ the other
+ E
+ . 'more '/eg;
+
+you have to write
+
+ s/this/<<E . 'that'
+ . 'more '/eg;
+ the other
+ E
+
=head2 List value constructors
List values are denoted by separating individual values by commas
interpolating an array with no elements is the same as if no
array had been interpolated at that point.
+This interpolation combines with the facts that the opening
+and closing parentheses are optional (except necessary for
+precedence) and lists may end with an optional comma to mean that
+multiple commas within lists are legal syntax. The list C<1,,3> is a
+concatenation of two lists, C<1,> and C<3>, the first of which ends
+with that optional comma. C<1,,3> is C<(1,),(3)> is C<1,3> (And
+similarly for C<1,,,3> is C<(1,),(,),3> is C<1,3> and so on.) Not that
+we'd advise you to use this obfuscation.
+
A list value may also be subscripted like a normal array. You must
put the list in parentheses to avoid ambiguity. For example:
In other words, C<*FH> must be used to create new symbol table entries;
C<*foo{THING}> cannot. When in doubt, use C<*FH>.
+All functions that are capable of creating filehandles (open(),
+opendir(), pipe(), socketpair(), sysopen(), socket(), and accept())
+automatically create an anonymous filehandle if the handle passed to
+them is an uninitialized scalar variable. This allows the constructs
+such as C<open(my $fh, ...)> and C<open(local $fh,...)> to be used to
+create filehandles that will conveniently be closed automatically when
+the scope ends, provided there are no other references to them. This
+largely eliminates the need for typeglobs when opening filehandles
+that must be passed around, as in the following example:
+
+ sub myopen {
+ open my $fh, "@_"
+ or die "Can't open '@_': $!";
+ return $fh;
+ }
+
+ {
+ my $f = myopen("</etc/motd");
+ print <$f>;
+ # $f implicitly closed here
+ }
+
Another way to create anonymous filehandles is with the Symbol
module or with the IO::Handle module and its ilk. These modules
have the advantage of not hiding different types of the same name