xref: /openbsd/gnu/usr.bin/perl/pod/perldata.pod (revision e0680481)
1=head1 NAME
2
3perldata - Perl data types
4
5=head1 DESCRIPTION
6
7=head2 Variable names
8X<variable, name> X<variable name> X<data type> X<type>
9
10Perl has three built-in data types: scalars, arrays of scalars, and
11associative arrays of scalars, known as "hashes".  A scalar is a
12single string (of any size, limited only by the available memory),
13number, or a reference to something (which will be discussed
14in L<perlref>).  Normal arrays are ordered lists of scalars indexed
15by number, starting with 0.  Hashes are unordered collections of scalar
16values indexed by their associated string key.
17
18Values are usually referred to by name, or through a named reference.
19The first character of the name tells you to what sort of data
20structure it refers.  The rest of the name tells you the particular
21value to which it refers.  Usually this name is a single I<identifier>,
22that is, a string beginning with a letter or underscore, and
23containing letters, underscores, and digits.  In some cases, it may
24be a chain of identifiers, separated by C<::> (or by the deprecated C<'>);
25all but the last are interpreted as names of packages,
26to locate the namespace in which to look up the final identifier
27(see L<perlmod/Packages> for details).  For a more in-depth discussion
28on identifiers, see L</Identifier parsing>.  It's possible to
29substitute for a simple identifier, an expression that produces a reference
30to the value at runtime.   This is described in more detail below
31and in L<perlref>.
32X<identifier>
33
34Perl also has its own built-in variables whose names don't follow
35these rules.  They have strange names so they don't accidentally
36collide with one of your normal variables.  Strings that match
37parenthesized parts of a regular expression are saved under names
38containing only digits after the C<$> (see L<perlop> and L<perlre>).
39In addition, several special variables that provide windows into
40the inner working of Perl have names containing punctuation characters.
41These are documented in L<perlvar>.
42X<variable, built-in>
43
44Scalar values are always named with '$', even when referring to a
45scalar that is part of an array or a hash.  The '$' symbol works
46semantically like the English word "the" in that it indicates a
47single value is expected.
48X<scalar>
49
50    $days		# the simple scalar value "days"
51    $days[28]		# the 29th element of array @days
52    $days{'Feb'}	# the 'Feb' value from hash %days
53    $#days		# the last index of array @days
54
55Entire arrays (and slices of arrays and hashes) are denoted by '@',
56which works much as the word "these" or "those" does in English,
57in that it indicates multiple values are expected.
58X<array>
59
60    @days		# ($days[0], $days[1],... $days[n])
61    @days[3,4,5]	# same as ($days[3],$days[4],$days[5])
62    @days{'a','c'}	# same as ($days{'a'},$days{'c'})
63
64Entire hashes are denoted by '%':
65X<hash>
66
67    %days		# (key1, val1, key2, val2 ...)
68
69In addition, subroutines are named with an initial '&', though this
70is optional when unambiguous, just as the word "do" is often redundant
71in English.  Symbol table entries can be named with an initial '*',
72but you don't really care about that yet (if ever :-).
73
74Every variable type has its own namespace, as do several
75non-variable identifiers.  This means that you can, without fear
76of conflict, use the same name for a scalar variable, an array, or
77a hash--or, for that matter, for a filehandle, a directory handle, a
78subroutine name, a format name, or a label.  This means that $foo
79and @foo are two different variables.  It also means that C<$foo[1]>
80is a part of @foo, not a part of $foo.  This may seem a bit weird,
81but that's okay, because it is weird.
82X<namespace>
83
84Because variable references always start with '$', '@', or '%', the
85"reserved" words aren't in fact reserved with respect to variable
86names.  They I<are> reserved with respect to labels and filehandles,
87however, which don't have an initial special character.  You can't
88have a filehandle named "log", for instance.  Hint: you could say
89C<open(LOG,'logfile')> rather than C<open(log,'logfile')>.  Using
90uppercase filehandles also improves readability and protects you
91from conflict with future reserved words.  Case I<is> significant--"FOO",
92"Foo", and "foo" are all different names.  Names that start with a
93letter or underscore may also contain digits and underscores.
94X<identifier, case sensitivity>
95X<case>
96
97It is possible to replace such an alphanumeric name with an expression
98that returns a reference to the appropriate type.  For a description
99of this, see L<perlref>.
100
101Names that start with a digit may contain only more digits.  Names
102that do not start with a letter, underscore, digit or a caret are
103limited to one character, e.g.,  C<$%> or
104C<$$>.  (Most of these one character names have a predefined
105significance to Perl.  For instance, C<$$> is the current process
106id.  And all such names are reserved for Perl's possible use.)
107
108=head2 Identifier parsing
109X<identifiers>
110
111Up until Perl 5.18, the actual rules of what a valid identifier
112was were a bit fuzzy.  However, in general, anything defined here should
113work on previous versions of Perl, while the opposite -- edge cases
114that work in previous versions, but aren't defined here -- probably
115won't work on newer versions.
116As an important side note, please note that the following only applies
117to bareword identifiers as found in Perl source code, not identifiers
118introduced through symbolic references, which have much fewer
119restrictions.
120If working under the effect of the C<use utf8;> pragma, the following
121rules apply:
122
123    / (?[ ( \p{Word} & \p{XID_Start} ) + [_] ])
124      (?[ ( \p{Word} & \p{XID_Continue} ) ]) *    /x
125
126That is, a "start" character followed by any number of "continue"
127characters.  Perl requires every character in an identifier to also
128match C<\w> (this prevents some problematic cases); and Perl
129additionally accepts identifier names beginning with an underscore.
130
131If not under C<use utf8>, the source is treated as ASCII + 128 extra
132generic characters, and identifiers should match
133
134    / (?aa) (?!\d) \w+ /x
135
136That is, any word character in the ASCII range, as long as the first
137character is not a digit.
138
139There are two package separators in Perl: A double colon (C<::>) and a single
140quote (C<'>).  Use of C<'> as the package separator is deprecated and will be
141removed in Perl 5.40.  Normal identifiers can start or end with a double
142colon, and can contain several parts delimited by double colons.  Single
143quotes have similar rules, but with the exception that they are not legal at
144the end of an identifier: That is, C<$'foo> and C<$foo'bar> are legal, but
145C<$foo'bar'> is not.
146
147Additionally, if the identifier is preceded by a sigil --
148that is, if the identifier is part of a variable name -- it
149may optionally be enclosed in braces.
150
151While you can mix double colons with singles quotes, the quotes must come
152after the colons: C<$::::'foo> and C<$foo::'bar> are legal, but C<$::'::foo>
153and C<$foo'::bar> are not.
154
155Put together, a grammar to match a basic identifier becomes
156
157 /
158  (?(DEFINE)
159      (?<variable>
160          (?&sigil)
161          (?:
162                  (?&normal_identifier)
163              |   \{ \s* (?&normal_identifier) \s* \}
164          )
165      )
166      (?<normal_identifier>
167          (?: :: )* '?
168           (?&basic_identifier)
169           (?: (?= (?: :: )+ '? | (?: :: )* ' ) (?&normal_identifier) )?
170          (?: :: )*
171      )
172      (?<basic_identifier>
173        # is use utf8 on?
174          (?(?{ (caller(0))[8] & $utf8::hint_bits })
175              (?&Perl_XIDS) (?&Perl_XIDC)*
176            | (?aa) (?!\d) \w+
177          )
178      )
179      (?<sigil> [&*\$\@\%])
180      (?<Perl_XIDS> (?[ ( \p{Word} & \p{XID_Start} ) + [_] ]) )
181      (?<Perl_XIDC> (?[ \p{Word} & \p{XID_Continue} ]) )
182  )
183 /x
184
185Meanwhile, special identifiers don't follow the above rules; For the most
186part, all of the identifiers in this category have a special meaning given
187by Perl.  Because they have special parsing rules, these generally can't be
188fully-qualified.  They come in six forms (but don't use forms 5 and 6):
189
190=over
191
192=item 1.
193
194A sigil, followed solely by digits matching C<\p{POSIX_Digit}>, like
195C<$0>, C<$1>, or C<$10000>.
196
197=item 2.
198
199A sigil followed by a single character matching the C<\p{POSIX_Punct}>
200property, like C<$!> or C<%+>, except the character C<"{"> doesn't work.
201
202=item 3.
203
204A sigil, followed by a caret and any one of the characters
205C<[][A-Z^_?\]>, like C<$^V> or C<$^]>.
206
207=item 4.
208
209Similar to the above, a sigil, followed by bareword text in braces,
210where the first character is a caret.  The next character is any one of
211the characters C<[][A-Z^_?\]>, followed by ASCII word characters.  An
212example is C<${^GLOBAL_PHASE}>.
213
214=item 5.
215
216A sigil, followed by any single character in the range C<[\xA1-\xAC\xAE-\xFF]>
217when not under C<S<"use utf8">>.  (Under C<S<"use utf8">>, the normal
218identifier rules given earlier in this section apply.)  Use of
219non-graphic characters (the C1 controls, the NO-BREAK SPACE, and the
220SOFT HYPHEN) has been disallowed since v5.26.0.
221The use of the other characters is unwise, as these are all
222reserved to have special meaning to Perl, and none of them currently
223do have special meaning, though this could change without notice.
224
225Note that an implication of this form is that there are identifiers only
226legal under C<S<"use utf8">>, and vice-versa, for example the identifier
227C<$E<233>tat> is legal under C<S<"use utf8">>, but is otherwise
228considered to be the single character variable C<$E<233>> followed by
229the bareword C<"tat">, the combination of which is a syntax error.
230
231=item 6.
232
233This is a combination of the previous two forms.  It is valid only when
234not under S<C<"use utf8">> (normal identifier rules apply when under
235S<C<"use utf8">>).  The form is a sigil, followed by text in braces,
236where the first character is any one of the characters in the range
237C<[\x80-\xFF]> followed by ASCII word characters up to the trailing
238brace.
239
240The same caveats as the previous form apply:  The non-graphic
241characters are no longer allowed with S<"use utf8">, it is unwise
242to use this form at all, and utf8ness makes a big difference.
243
244=back
245
246Prior to Perl v5.24, non-graphical ASCII control characters were also
247allowed in some situations; this had been deprecated since v5.20.
248
249=head2 Context
250X<context> X<scalar context> X<list context>
251
252The interpretation of operations and values in Perl sometimes depends
253on the requirements of the context around the operation or value.
254There are two major contexts: list and scalar.  Certain operations
255return list values in contexts wanting a list, and scalar values
256otherwise.  If this is true of an operation it will be mentioned in
257the documentation for that operation.  In other words, Perl overloads
258certain operations based on whether the expected return value is
259singular or plural.  Some words in English work this way, like "fish"
260and "sheep".
261
262In a reciprocal fashion, an operation provides either a scalar or a
263list context to each of its arguments.  For example, if you say
264
265    int( <STDIN> )
266
267the integer operation provides scalar context for the <>
268operator, which responds by reading one line from STDIN and passing it
269back to the integer operation, which will then find the integer value
270of that line and return that.  If, on the other hand, you say
271
272    sort( <STDIN> )
273
274then the sort operation provides list context for <>, which
275will proceed to read every line available up to the end of file, and
276pass that list of lines back to the sort routine, which will then
277sort those lines and return them as a list to whatever the context
278of the sort was.
279
280Assignment is a little bit special in that it uses its left argument
281to determine the context for the right argument.  Assignment to a
282scalar evaluates the right-hand side in scalar context, while
283assignment to an array or hash evaluates the righthand side in list
284context.  Assignment to a list (or slice, which is just a list
285anyway) also evaluates the right-hand side in list context.
286
287When you use the C<use warnings> pragma or Perl's B<-w> command-line
288option, you may see warnings
289about useless uses of constants or functions in "void context".
290Void context just means the value has been discarded, such as a
291statement containing only C<"fred";> or C<getpwuid(0);>.  It still
292counts as scalar context for functions that care whether or not
293they're being called in list context.
294
295User-defined subroutines may choose to care whether they are being
296called in a void, scalar, or list context.  Most subroutines do not
297need to bother, though.  That's because both scalars and lists are
298automatically interpolated into lists.  See L<perlfunc/wantarray>
299for how you would dynamically discern your function's calling
300context.
301
302=head2 Scalar values
303X<scalar> X<number> X<string> X<reference>
304
305All data in Perl is a scalar, an array of scalars, or a hash of
306scalars.  A scalar may contain one single value in any of three
307different flavors: a number, a string, or a reference.  In general,
308conversion from one form to another is transparent.  Although a
309scalar may not directly hold multiple values, it may contain a
310reference to an array or hash which in turn contains multiple values.
311
312Scalars aren't necessarily one thing or another.  There's no place
313to declare a scalar variable to be of type "string", type "number",
314type "reference", or anything else.  Because of the automatic
315conversion of scalars, operations that return scalars don't need
316to care (and in fact, cannot care) whether their caller is looking
317for a string, a number, or a reference.  Perl is a contextually
318polymorphic language whose scalars can be strings, numbers, or
319references (which includes objects).  Although strings and numbers
320are considered pretty much the same thing for nearly all purposes,
321references are strongly-typed, uncastable pointers with builtin
322reference-counting and destructor invocation.
323
324X<truth> X<falsehood> X<true> X<false> X<!> X<not> X<negation> X<0>
325X<boolean> X<bool>
326A scalar value is interpreted as FALSE in the Boolean sense
327if it is undefined, the null string or the number 0 (or its
328string equivalent, "0"), and TRUE if it is anything else.  The
329Boolean context is just a special kind of scalar context where no
330conversion to a string or a number is ever performed.
331Negation of a true value by C<!> or C<not> returns a special false value.
332When evaluated as a string it is treated as C<"">, but as a number, it
333is treated as 0.  Most Perl operators
334that return true or false behave this way.
335
336There are actually two varieties of null strings (sometimes referred
337to as "empty" strings), a defined one and an undefined one.  The
338defined version is just a string of length zero, such as C<"">.
339The undefined version is the value that indicates that there is
340no real value for something, such as when there was an error, or
341at end of file, or when you refer to an uninitialized variable or
342element of an array or hash.  Although in early versions of Perl,
343an undefined scalar could become defined when first used in a
344place expecting a defined value, this no longer happens except for
345rare cases of autovivification as explained in L<perlref>.  You can
346use the defined() operator to determine whether a scalar value is
347defined (this has no meaning on arrays or hashes), and the undef()
348operator to produce an undefined value.
349X<defined> X<undefined> X<undef> X<null> X<string, null>
350
351To find out whether a given string is a valid non-zero number, it's
352sometimes enough to test it against both numeric 0 and also lexical
353"0" (although this will cause noises if warnings are on).  That's
354because strings that aren't numbers count as 0, just as they do in B<awk>:
355
356    if ($str == 0 && $str ne "0")  {
357	warn "That doesn't look like a number";
358    }
359
360That method may be best because otherwise you won't treat IEEE
361notations like C<NaN> or C<Infinity> properly.  At other times, you
362might prefer to determine whether string data can be used numerically
363by calling the POSIX::strtod() function or by inspecting your string
364with a regular expression (as documented in L<perlre>).
365
366    warn "has nondigits"	if     /\D/;
367    warn "not a natural number" unless /^\d+$/;             # rejects -3
368    warn "not an integer"       unless /^-?\d+$/;           # rejects +3
369    warn "not an integer"       unless /^[+-]?\d+$/;
370    warn "not a decimal number" unless /^-?\d+\.?\d*$/;     # rejects .2
371    warn "not a decimal number" unless /^-?(?:\d+(?:\.\d*)?|\.\d+)$/;
372    warn "not a C float"
373	unless /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/;
374
375The length of an array is a scalar value.  You may find the length
376of array @days by evaluating C<$#days>, as in B<csh>.  However, this
377isn't the length of the array; it's the subscript of the last element,
378which is a different value since there is ordinarily a 0th element.
379Assigning to C<$#days> actually changes the length of the array.
380Shortening an array this way destroys intervening values.  Lengthening
381an array that was previously shortened does not recover values
382that were in those elements.
383X<$#> X<array, length>
384
385You can also gain some minuscule measure of efficiency by pre-extending
386an array that is going to get big.  You can also extend an array
387by assigning to an element that is off the end of the array.  You
388can truncate an array down to nothing by assigning the null list
389() to it.  The following are equivalent:
390
391    @whatever = ();
392    $#whatever = -1;
393
394If you evaluate an array in scalar context, it returns the length
395of the array.  (Note that this is not true of lists, which return
396the last value, like the C comma operator, nor of built-in functions,
397which return whatever they feel like returning.)  The following is
398always true:
399X<array, length>
400
401    scalar(@whatever) == $#whatever + 1;
402
403Some programmers choose to use an explicit conversion so as to
404leave nothing to doubt:
405
406    $element_count = scalar(@whatever);
407
408If you evaluate a hash in scalar context, it returns a false value if
409the hash is empty.  If there are any key/value pairs, it returns a
410true value.  A more precise definition is version dependent.
411
412Prior to Perl 5.25 the value returned was a string consisting of the
413number of used buckets and the number of allocated buckets, separated
414by a slash.  This is pretty much useful only to find out whether
415Perl's internal hashing algorithm is performing poorly on your data
416set.  For example, you stick 10,000 things in a hash, but evaluating
417%HASH in scalar context reveals C<"1/16">, which means only one out
418of sixteen buckets has been touched, and presumably contains all
41910,000 of your items.  This isn't supposed to happen.
420
421As of Perl 5.25 the return was changed to be the count of keys in the
422hash. If you need access to the old behavior you can use
423C<Hash::Util::bucket_ratio()> instead.
424
425If a tied hash is evaluated in scalar context, the C<SCALAR> method is
426called (with a fallback to C<FIRSTKEY>).
427X<hash, scalar context> X<hash, bucket> X<bucket>
428
429You can preallocate space for a hash by assigning to the keys() function.
430This rounds up the allocated buckets to the next power of two:
431
432    keys(%users) = 1000;		# allocate 1024 buckets
433
434=head2 Scalar value constructors
435X<scalar, literal> X<scalar, constant>
436
437Numeric literals are specified in any of the following floating point or
438integer formats:
439
440 12345
441 12345.67
442 .23E-10             # a very small number
443 3.14_15_92          # a very important number
444 4_294_967_296       # underscore for legibility
445 0xff                # hex
446 0xdead_beef         # more hex
447 0377                # octal (only numbers, begins with 0)
448 0o12_345            # alternative octal (introduced in Perl 5.33.5)
449 0b011011            # binary
450 0x1.999ap-4         # hexadecimal floating point (the 'p' is required)
451
452You are allowed to use underscores (underbars) in numeric literals
453between digits for legibility (but not multiple underscores in a row:
454C<23__500> is not legal; C<23_500> is).
455You could, for example, group binary
456digits by threes (as for a Unix-style mode argument such as 0b110_100_100)
457or by fours (to represent nibbles, as in 0b1010_0110) or in other groups.
458X<number, literal>
459
460String literals are usually delimited by either single or double
461quotes.  They work much like quotes in the standard Unix shells:
462double-quoted string literals are subject to backslash and variable
463substitution; single-quoted strings are not (except for C<\'> and
464C<\\>).  The usual C-style backslash rules apply for making
465characters such as newline, tab, etc., as well as some more exotic
466forms.  See L<perlop/"Quote and Quote-like Operators"> for a list.
467X<string, literal>
468
469Hexadecimal, octal, or binary, representations in string literals
470(e.g. '0xff') are not automatically converted to their integer
471representation.  The hex() and oct() functions make these conversions
472for you.  See L<perlfunc/hex> and L<perlfunc/oct> for more details.
473
474Hexadecimal floating point can start just like a hexadecimal literal,
475and it can be followed by an optional fractional hexadecimal part,
476but it must be followed by C<p>, an optional sign, and a power of two.
477The format is useful for accurately presenting floating point values,
478avoiding conversions to or from decimal floating point, and therefore
479avoiding possible loss in precision.  Notice that while most current
480platforms use the 64-bit IEEE 754 floating point, not all do.  Another
481potential source of (low-order) differences are the floating point
482rounding modes, which can differ between CPUs, operating systems,
483and compilers, and which Perl doesn't control.
484
485You can also embed newlines directly in your strings, i.e., they can end
486on a different line than they begin.  This is nice, but if you forget
487your trailing quote, the error will not be reported until Perl finds
488another line containing the quote character, which may be much further
489on in the script.  Variable substitution inside strings is limited to
490scalar variables, arrays, and array or hash slices.  (In other words,
491names beginning with $ or @, followed by an optional bracketed
492expression as a subscript.)  The following code segment prints out "The
493price is $Z<>100."
494X<interpolation>
495
496    $Price = '$100';	# not interpolated
497    print "The price is $Price.\n";	# interpolated
498
499There is no double interpolation in Perl, so the C<$100> is left as is.
500
501By default floating point numbers substituted inside strings use the
502dot (".")  as the decimal separator.  If C<use locale> is in effect,
503and POSIX::setlocale() has been called, the character used for the
504decimal separator is affected by the LC_NUMERIC locale.
505See L<perllocale> and L<POSIX>.
506
507=head3 Demarcated variable names using braces
508
509As in some shells, you can enclose the variable name in braces as a
510demarcator to disambiguate it from following alphanumerics and
511underscores or other text. You must also do this when interpolating a
512variable into a string to separate the variable name from a following
513double-colon or an apostrophe since these would be otherwise treated as
514a package separator:
515X<interpolation>
516
517    $who = "Larry";
518    print PASSWD "${who}::0:0:Superuser:/:/bin/perl\n";
519    print "We use ${who}speak when ${who}'s here.\n";
520
521Without the braces, Perl would have looked for a $whospeak, a
522C<$who::0>, and a C<$who's> variable.  The last two would be the
523$0 and the $s variables in the (presumably) non-existent package
524C<who>.
525
526In fact, a simple identifier within such curly braces is forced to be a
527string, and likewise within a hash subscript. Neither need quoting. Our
528earlier example, C<$days{'Feb'}> can be written as C<$days{Feb}> and the
529quotes will be assumed automatically. But anything more complicated in
530the subscript will be interpreted as an expression. This means for
531example that C<$version{2.0}++> is equivalent to C<$version{2}++>, not
532to C<$version{'2.0'}++>.
533
534There is a similar problem with interpolation with text that looks like
535array or hash access notation. Placing a simple variable like C<$who>
536immediately in front of text like C<"[1]"> or C<"{foo}"> would cause the
537variable to be interpolated as accessing an element of C<@who> or a
538value stored in C<%who>:
539
540    $who = "Larry Wall";
541    print "$who[1] is the father of Perl.\n";
542
543would attempt to access index 1 of an array named C<@who>. Again, using
544braces will prevent this from happening:
545
546    $who = "Larry Wall";
547    print "${who}[1] is the father of Perl.\n";
548
549will be treated the same as
550
551    $who = "Larry Wall";
552    print $who . "[1] is the father of Perl.\n";
553
554This notation also applies to more complex variable descriptions,
555such as array or hash access with subscripts. For instance
556
557    @name = qw(Larry Curly Moe);
558    print "Also ${name[0]}[1] was a member\n";
559
560Without the braces the above example would be parsed as a two level
561array subscript in the C<@name> array, and under C<use strict> would
562likely produce a fatal exception, as it would be parsed like this:
563
564    print "Also " . $name[0][1] . " was a member\n";
565
566and not as the intended:
567
568    print "Also " . $name[0] . "[1] was a member\n";
569
570A similar result may be derived by using a backslash on the first
571character of the subscript or package notation that is not part of
572the variable you want to access. Thus the above example could also
573be written:
574
575    @name = qw(Larry Curly Moe);
576    print "Also $name[0]\[1] was a member\n";
577
578however for some special variables (multi character caret variables) the
579demarcated form using curly braces is the B<only> way you can reference
580the variable at all, and the only way you can access a subscript of the
581variable via interpolation.
582
583Consider the magic array C<@{^CAPTURE}> which is populated by the
584regex engine with the contents of all of the capture buffers in a
585pattern (see L<perlvar> and L<perlre>). The B<only> way you can
586access one of these members inside of a string is via the braced
587(demarcated) form:
588
589    "abc"=~/(.)(.)(.)/
590        and print "Second buffer is ${^CAPTURE[1]}";
591
592is equivalent to
593
594    "abc"=~/(.)(.)(.)/
595        and print "Second buffer is " . ${^CAPTURE}[1];
596
597Saying C<@^CAPTURE> is a syntax error, so it B<must> be referenced as
598C<@{^CAPTURE}>, and to access one of its elements in normal code you
599would write C< ${^CAPTURE}[1] >. However when interpolating in a string
600C<"${^CAPTURE}[1]"> would be equivalent to C<${^CAPTURE} . "[1]">,
601which does not even refer to the same variable! Thus the subscripts must
602B<also> be placed B<inside> of the braces: C<"${^CAPTURE[1]}">.
603
604The demarcated form using curly braces can be used with all the
605different types of variable access, including array and hash slices. For
606instance code like the following:
607
608    @name = qw(Larry Curly Moe);
609    local $" = " and ";
610    print "My favorites were @{name[1,2]}.\n";
611
612would output
613
614    My favorites were Curly and Moe.
615
616=head3 Special floating point: infinity (Inf) and not-a-number (NaN)
617
618Floating point values include the special values C<Inf> and C<NaN>,
619for infinity and not-a-number.  The infinity can be also negative.
620
621The infinity is the result of certain math operations that overflow
622the floating point range, like 9**9**9.  The not-a-number is the
623result when the result is undefined or unrepresentable.  Though note
624that you cannot get C<NaN> from some common "undefined" or
625"out-of-range" operations like dividing by zero, or square root of
626a negative number, since Perl generates fatal errors for those.
627
628The infinity and not-a-number have their own special arithmetic rules.
629The general rule is that they are "contagious": C<Inf> plus one is
630C<Inf>, and C<NaN> plus one is C<NaN>.  Where things get interesting
631is when you combine infinities and not-a-numbers: C<Inf> minus C<Inf>
632and C<Inf> divided by C<Inf> are C<NaN> (while C<Inf> plus C<Inf> is
633C<Inf> and C<Inf> times C<Inf> is C<Inf>).  C<NaN> is also curious
634in that it does not equal any number, I<including> itself:
635C<NaN> != C<NaN>.
636
637Perl doesn't understand C<Inf> and C<NaN> as numeric literals, but
638you can have them as strings, and Perl will convert them as needed:
639"Inf" + 1.  (You can, however, import them from the POSIX extension;
640C<use POSIX qw(Inf NaN);> and then use them as literals.)
641
642Note that on input (string to number) Perl accepts C<Inf> and C<NaN>
643in many forms.   Case is ignored, and the Win32-specific forms like
644C<1.#INF> are understood, but on output the values are normalized to
645C<Inf> and C<NaN>.
646
647=head3 Version Strings
648X<version string> X<vstring> X<v-string>
649
650A literal of the form C<v1.20.300.4000> is parsed as a string composed
651of characters with the specified ordinals.  This form, known as
652v-strings, provides an alternative, more readable way to construct
653strings, rather than use the somewhat less readable interpolation form
654C<"\x{1}\x{14}\x{12c}\x{fa0}">.  This is useful for representing
655Unicode strings, and for comparing version "numbers" using the string
656comparison operators, C<cmp>, C<gt>, C<lt> etc.  If there are two or
657more dots in the literal, the leading C<v> may be omitted.
658
659    print v9786;              # prints SMILEY, "\x{263a}"
660    print v102.111.111;       # prints "foo"
661    print 102.111.111;        # same
662
663Such literals are accepted by both C<require> and C<use> for
664doing a version check.  Note that using the v-strings for IPv4
665addresses is not portable unless you also use the
666inet_aton()/inet_ntoa() routines of the Socket package.
667
668Note that since Perl 5.8.1 the single-number v-strings (like C<v65>)
669are not v-strings before the C<< => >> operator (which is usually used
670to separate a hash key from a hash value); instead they are interpreted
671as literal strings ('v65').  They were v-strings from Perl 5.6.0 to
672Perl 5.8.0, but that caused more confusion and breakage than good.
673Multi-number v-strings like C<v65.66> and C<65.66.67> continue to
674be v-strings always.
675
676=head3 Special Literals
677X<special literal> X<__END__> X<__DATA__> X<END> X<DATA>
678X<end> X<data> X<^D> X<^Z>
679
680The special literals __FILE__, __LINE__, and __PACKAGE__
681represent the current filename, line number, and package name at that
682point in your program.  __SUB__ gives a reference to the current
683subroutine.  They may be used only as separate tokens; they
684will not be interpolated into strings.  If there is no current package
685(due to an empty C<package;> directive), __PACKAGE__ is the undefined
686value.  (But the empty C<package;> is no longer supported, as of version
6875.10.)  Outside of a subroutine, __SUB__ is the undefined value.  __SUB__
688is only available in 5.16 or higher, and only with a C<use v5.16> or
689C<use feature "current_sub"> declaration.
690X<__FILE__> X<__LINE__> X<__PACKAGE__> X<__SUB__>
691X<line> X<file> X<package>
692
693The two control characters ^D and ^Z, and the tokens __END__ and __DATA__
694may be used to indicate the logical end of the script before the actual
695end of file.  Any following text is ignored by the interpreter unless
696read by the program as described below.
697
698Text after __DATA__ may be read via the filehandle C<PACKNAME::DATA>,
699where C<PACKNAME> is the package that was current when the __DATA__
700token was encountered.  The filehandle is left open pointing to the
701line after __DATA__.  The program should C<close DATA> when it is done
702reading from it.  (Leaving it open leaks filehandles if the module is
703reloaded for any reason, so it's a safer practice to close it.)  For
704compatibility with older scripts written before __DATA__ was
705introduced, __END__ behaves like __DATA__ in the top level script (but
706not in files loaded with C<require> or C<do>) and leaves the remaining
707contents of the file accessible via C<main::DATA>.
708
709  while (my $line = <DATA>) { print $line; }
710  close DATA;
711  __DATA__
712  Hello world.
713
714The C<DATA> file handle by default has whatever PerlIO layers were
715in place when Perl read the file to parse the source.  Normally that
716means that the file is being read bytewise, as if it were encoded in
717Latin-1, but there are two major ways for it to be otherwise.  Firstly,
718if the C<__END__>/C<__DATA__> token is in the scope of a C<use utf8>
719pragma then the C<DATA> handle will be in UTF-8 mode.  And secondly,
720if the source is being read from perl's standard input then the C<DATA>
721file handle is actually aliased to the C<STDIN> file handle, and may
722be in UTF-8 mode because of the C<PERL_UNICODE> environment variable or
723perl's command-line switches.
724
725See L<SelfLoader> for more description of __DATA__, and
726an example of its use.  Note that you cannot read from the DATA
727filehandle in a BEGIN block: the BEGIN block is executed as soon
728as it is seen (during compilation), at which point the corresponding
729__DATA__ (or __END__) token has not yet been seen.
730
731=head3 Barewords
732X<bareword>
733
734A word that has no other interpretation in the grammar will
735be treated as if it were a quoted string.  These are known as
736"barewords".  As with filehandles and labels, a bareword that consists
737entirely of lowercase letters risks conflict with future reserved
738words, and if you use the C<use warnings> pragma or the B<-w> switch,
739Perl will warn you about any such words.  Perl limits barewords (like
740identifiers) to about 250 characters.  Future versions of Perl are likely
741to eliminate these arbitrary limitations.
742
743Some people may wish to outlaw barewords entirely.  If you
744say
745
746    use strict 'subs';
747
748then any bareword that would NOT be interpreted as a subroutine call
749produces a compile-time error instead.  The restriction lasts to the
750end of the enclosing block.  An inner block may countermand this
751by saying C<no strict 'subs'>.
752
753=head3 Array Interpolation
754X<array, interpolation> X<interpolation, array> X<$">
755
756Arrays and slices are interpolated into double-quoted strings
757by joining the elements with the delimiter specified in the C<$">
758variable (C<$LIST_SEPARATOR> if "use English;" is specified),
759space by default.  The following are equivalent:
760
761    $temp = join($", @ARGV);
762    system "echo $temp";
763
764    system "echo @ARGV";
765
766Within search patterns (which also undergo double-quotish substitution)
767there is an unfortunate ambiguity:  Is C</$foo[bar]/> to be interpreted as
768C</${foo}[bar]/> (where C<[bar]> is a character class for the regular
769expression) or as C</${foo[bar]}/> (where C<[bar]> is the subscript to array
770@foo)?  If @foo doesn't otherwise exist, then it's obviously a
771character class.  If @foo exists, Perl takes a good guess about C<[bar]>,
772and is almost always right.  If it does guess wrong, or if you're just
773plain paranoid, you can force the correct interpretation with curly
774braces as above.
775
776If you're looking for the information on how to use here-documents,
777which used to be here, that's been moved to
778L<perlop/Quote and Quote-like Operators>.
779
780=head2 List value constructors
781X<list>
782
783List values are denoted by separating individual values by commas
784(and enclosing the list in parentheses where precedence requires it):
785
786    (LIST)
787
788In a context not requiring a list value, the value of what appears
789to be a list literal is simply the value of the final element, as
790with the C comma operator.  For example,
791
792    @foo = ('cc', '-E', $bar);
793
794assigns the entire list value to array @foo, but
795
796    $foo = ('cc', '-E', $bar);
797
798assigns the value of variable $bar to the scalar variable $foo.
799Note that the value of an actual array in scalar context is the
800length of the array; the following assigns the value 3 to $foo:
801
802    @foo = ('cc', '-E', $bar);
803    $foo = @foo;                # $foo gets 3
804
805You may have an optional comma before the closing parenthesis of a
806list literal, so that you can say:
807
808    @foo = (
809        1,
810        2,
811        3,
812    );
813
814To use a here-document to assign an array, one line per element,
815you might use an approach like this:
816
817    @sauces = <<End_Lines =~ m/(\S.*\S)/g;
818        normal tomato
819        spicy tomato
820        green chile
821        pesto
822        white wine
823    End_Lines
824
825LISTs do automatic interpolation of sublists.  That is, when a LIST is
826evaluated, each element of the list is evaluated in list context, and
827the resulting list value is interpolated into LIST just as if each
828individual element were a member of LIST.  Thus arrays and hashes lose their
829identity in a LIST--the list
830
831    (@foo,@bar,&SomeSub,%glarch)
832
833contains all the elements of @foo followed by all the elements of @bar,
834followed by all the elements returned by the subroutine named SomeSub
835called in list context, followed by the key/value pairs of %glarch.
836To make a list reference that does I<NOT> interpolate, see L<perlref>.
837
838The null list is represented by ().  Interpolating it in a list
839has no effect.  Thus ((),(),()) is equivalent to ().  Similarly,
840interpolating an array with no elements is the same as if no
841array had been interpolated at that point.
842
843This interpolation combines with the facts that the opening
844and closing parentheses are optional (except when necessary for
845precedence) and lists may end with an optional comma to mean that
846multiple commas within lists are legal syntax.  The list C<1,,3> is a
847concatenation of two lists, C<1,> and C<3>, the first of which ends
848with that optional comma.  C<1,,3> is C<(1,),(3)> is C<1,3> (And
849similarly for C<1,,,3> is C<(1,),(,),3> is C<1,3> and so on.)  Not that
850we'd advise you to use this obfuscation.
851
852A list value may also be subscripted like a normal array.  You must
853put the list in parentheses to avoid ambiguity.  For example:
854
855    # Stat returns list value.
856    $time = (stat($file))[8];
857
858    # SYNTAX ERROR HERE.
859    $time = stat($file)[8];  # OOPS, FORGOT PARENTHESES
860
861    # Find a hex digit.
862    $hexdigit = ('a','b','c','d','e','f')[$digit-10];
863
864    # A "reverse comma operator".
865    return (pop(@foo),pop(@foo))[0];
866
867Lists may be assigned to only when each element of the list
868is itself legal to assign to:
869
870    ($x, $y, $z) = (1, 2, 3);
871
872    ($map{'red'}, $map{'blue'}, $map{'green'}) = (0x00f, 0x0f0, 0xf00);
873
874An exception to this is that you may assign to C<undef> in a list.
875This is useful for throwing away some of the return values of a
876function:
877
878    ($dev, $ino, undef, undef, $uid, $gid) = stat($file);
879
880As of Perl 5.22, you can also use C<(undef)x2> instead of C<undef, undef>.
881(You can also do C<($x) x 2>, which is less useful, because it assigns to
882the same variable twice, clobbering the first value assigned.)
883
884When you assign a list of scalars to an array, all previous values in that
885array are wiped out and the number of elements in the array will now be equal to
886the number of elements in the right-hand list -- the list from which
887assignment was made.  The array will automatically resize itself to precisely
888accommodate each element in the right-hand list.
889
890    use warnings;
891    my (@xyz, $x, $y, $z);
892
893    @xyz = (1, 2, 3);
894    print "@xyz\n";                             # 1 2 3
895
896    @xyz = ('al', 'be', 'ga', 'de');
897    print "@xyz\n";                             # al be ga de
898
899    @xyz = (101, 102);
900    print "@xyz\n";                             # 101 102
901
902When, however, you assign a list of scalars to another list of scalars, the
903results differ according to whether the left-hand list -- the list being
904assigned to -- has the same, more or fewer elements than the right-hand list.
905
906    ($x, $y, $z) = (1, 2, 3);
907    print "$x $y $z\n";                         # 1 2 3
908
909    ($x, $y, $z) = ('al', 'be', 'ga', 'de');
910    print "$x $y $z\n";                         # al be ga
911
912    ($x, $y, $z) = (101, 102);
913    print "$x $y $z\n";                         # 101 102
914    # Use of uninitialized value $z in concatenation (.)
915    # or string at [program] line [line number].
916
917If the number of scalars in the left-hand list is less than that in the
918right-hand list, the "extra" scalars in the right-hand list will simply not be
919assigned.
920
921If the number of scalars in the left-hand list is greater than that in the
922left-hand list, the "missing" scalars will become undefined.
923
924    ($x, $y, $z) = (101, 102);
925    for my $el ($x, $y, $z) {
926        (defined $el) ? print "$el " : print "<undef>";
927    }
928    print "\n";
929                                                # 101 102 <undef>
930
931List assignment in scalar context returns the number of elements
932produced by the expression on the right side of the assignment:
933
934    $x = (($foo,$bar) = (3,2,1));       # set $x to 3, not 2
935    $x = (($foo,$bar) = f());           # set $x to f()'s return count
936
937This is handy when you want to do a list assignment in a Boolean
938context, because most list functions return a null list when finished,
939which when assigned produces a 0, which is interpreted as FALSE.
940
941It's also the source of a useful idiom for executing a function or
942performing an operation in list context and then counting the number of
943return values, by assigning to an empty list and then using that
944assignment in scalar context.  For example, this code:
945
946    $count = () = $string =~ /\d+/g;
947
948will place into $count the number of digit groups found in $string.
949This happens because the pattern match is in list context (since it
950is being assigned to the empty list), and will therefore return a list
951of all matching parts of the string.  The list assignment in scalar
952context will translate that into the number of elements (here, the
953number of times the pattern matched) and assign that to $count.  Note
954that simply using
955
956    $count = $string =~ /\d+/g;
957
958would not have worked, since a pattern match in scalar context will
959only return true or false, rather than a count of matches.
960
961The final element of a list assignment may be an array or a hash:
962
963    ($x, $y, @rest) = split;
964    my($x, $y, %rest) = @_;
965
966You can actually put an array or hash anywhere in the list, but the first one
967in the list will soak up all the values, and anything after it will become
968undefined.  This may be useful in a my() or local().
969
970A hash can be initialized using a literal list holding pairs of
971items to be interpreted as a key and a value:
972
973    # same as map assignment above
974    %map = ('red',0x00f,'blue',0x0f0,'green',0xf00);
975
976While literal lists and named arrays are often interchangeable, that's
977not the case for hashes.  Just because you can subscript a list value like
978a normal array does not mean that you can subscript a list value as a
979hash.  Likewise, hashes included as parts of other lists (including
980parameters lists and return lists from functions) always flatten out into
981key/value pairs.  That's why it's good to use references sometimes.
982
983It is often more readable to use the C<< => >> operator between key/value
984pairs.  The C<< => >> operator is mostly just a more visually distinctive
985synonym for a comma, but it also arranges for its left-hand operand to be
986interpreted as a string if it's a bareword that would be a legal simple
987identifier.  C<< => >> doesn't quote compound identifiers, that contain
988double colons.  This makes it nice for initializing hashes:
989
990    %map = (
991                 red   => 0x00f,
992                 blue  => 0x0f0,
993                 green => 0xf00,
994   );
995
996or for initializing hash references to be used as records:
997
998    $rec = {
999                witch => 'Mable the Merciless',
1000                cat   => 'Fluffy the Ferocious',
1001                date  => '10/31/1776',
1002    };
1003
1004or for using call-by-named-parameter to complicated functions:
1005
1006   $field = $query->radio_group(
1007               name      => 'group_name',
1008               values    => ['eenie','meenie','minie'],
1009               default   => 'meenie',
1010               linebreak => 'true',
1011               labels    => \%labels
1012   );
1013
1014Note that just because a hash is initialized in that order doesn't
1015mean that it comes out in that order.  See L<perlfunc/sort> for examples
1016of how to arrange for an output ordering.
1017
1018If a key appears more than once in the initializer list of a hash, the last
1019occurrence wins:
1020
1021    %circle = (
1022                  center => [5, 10],
1023                  center => [27, 9],
1024                  radius => 100,
1025                  color => [0xDF, 0xFF, 0x00],
1026                  radius => 54,
1027    );
1028
1029    # same as
1030    %circle = (
1031                  center => [27, 9],
1032                  color => [0xDF, 0xFF, 0x00],
1033                  radius => 54,
1034    );
1035
1036This can be used to provide overridable configuration defaults:
1037
1038    # values in %args take priority over %config_defaults
1039    %config = (%config_defaults, %args);
1040
1041=head2 Subscripts
1042
1043An array can be accessed one scalar at a
1044time by specifying a dollar sign (C<$>), then the
1045name of the array (without the leading C<@>), then the subscript inside
1046square brackets.  For example:
1047
1048    @myarray = (5, 50, 500, 5000);
1049    print "The Third Element is", $myarray[2], "\n";
1050
1051The array indices start with 0.  A negative subscript retrieves its
1052value from the end.  In our example, C<$myarray[-1]> would have been
10535000, and C<$myarray[-2]> would have been 500.
1054
1055Hash subscripts are similar, only instead of square brackets curly brackets
1056are used.  For example:
1057
1058    %scientists =
1059    (
1060        "Newton" => "Isaac",
1061        "Einstein" => "Albert",
1062        "Darwin" => "Charles",
1063        "Feynman" => "Richard",
1064    );
1065
1066    print "Darwin's First Name is ", $scientists{"Darwin"}, "\n";
1067
1068You can also subscript a list to get a single element from it:
1069
1070    $dir = (getpwnam("daemon"))[7];
1071
1072=head2 Multi-dimensional array emulation
1073
1074Multidimensional arrays may be emulated by subscripting a hash with a
1075list.  The elements of the list are joined with the subscript separator
1076(see L<perlvar/$;>).
1077
1078    $foo{$x,$y,$z}
1079
1080is equivalent to
1081
1082    $foo{join($;, $x, $y, $z)}
1083
1084The default subscript separator is "\034", the same as SUBSEP in B<awk>.
1085
1086=head2 Slices
1087X<slice> X<array, slice> X<hash, slice>
1088
1089A slice accesses several elements of a list, an array, or a hash
1090simultaneously using a list of subscripts.  It's more convenient
1091than writing out the individual elements as a list of separate
1092scalar values.
1093
1094    ($him, $her)   = @folks[0,-1];              # array slice
1095    @them          = @folks[0 .. 3];            # array slice
1096    ($who, $home)  = @ENV{"USER", "HOME"};      # hash slice
1097    ($uid, $dir)   = (getpwnam("daemon"))[2,7]; # list slice
1098
1099Since you can assign to a list of variables, you can also assign to
1100an array or hash slice.
1101
1102    @days[3..5]    = qw/Wed Thu Fri/;
1103    @colors{'red','blue','green'}
1104                   = (0xff0000, 0x0000ff, 0x00ff00);
1105    @folks[0, -1]  = @folks[-1, 0];
1106
1107The previous assignments are exactly equivalent to
1108
1109    ($days[3], $days[4], $days[5]) = qw/Wed Thu Fri/;
1110    ($colors{'red'}, $colors{'blue'}, $colors{'green'})
1111                   = (0xff0000, 0x0000ff, 0x00ff00);
1112    ($folks[0], $folks[-1]) = ($folks[-1], $folks[0]);
1113
1114Since changing a slice changes the original array or hash that it's
1115slicing, a C<foreach> construct will alter some--or even all--of the
1116values of the array or hash.
1117
1118    foreach (@array[ 4 .. 10 ]) { s/peter/paul/ }
1119
1120    foreach (@hash{qw[key1 key2]}) {
1121        s/^\s+//;                       # trim leading whitespace
1122        s/\s+$//;                       # trim trailing whitespace
1123        s/\b(\w)(\w*)\b/\u$1\L$2/g;     # "titlecase" words
1124    }
1125
1126As a special exception, when you slice a list (but not an array or a hash),
1127if the list evaluates to empty, then taking a slice of that empty list will
1128always yield the empty list in turn.  Thus:
1129
1130    @a = ()[0,1];          # @a has no elements
1131    @b = (@a)[0,1];        # @b has no elements
1132    @c = (sub{}->())[0,1]; # @c has no elements
1133    @d = ('a','b')[0,1];   # @d has two elements
1134    @e = (@d)[0,1,8,9];    # @e has four elements
1135    @f = (@d)[8,9];        # @f has two elements
1136
1137This makes it easy to write loops that terminate when a null list
1138is returned:
1139
1140    while ( ($home, $user) = (getpwent)[7,0] ) {
1141        printf "%-8s %s\n", $user, $home;
1142    }
1143
1144As noted earlier in this document, the scalar sense of list assignment
1145is the number of elements on the right-hand side of the assignment.
1146The null list contains no elements, so when the password file is
1147exhausted, the result is 0, not 2.
1148
1149Slices in scalar context return the last item of the slice.
1150
1151    @a = qw/first second third/;
1152    %h = (first => 'A', second => 'B');
1153    $t = @a[0, 1];                  # $t is now 'second'
1154    $u = @h{'first', 'second'};     # $u is now 'B'
1155
1156If you're confused about why you use an '@' there on a hash slice
1157instead of a '%', think of it like this.  The type of bracket (square
1158or curly) governs whether it's an array or a hash being looked at.
1159On the other hand, the leading symbol ('$' or '@') on the array or
1160hash indicates whether you are getting back a singular value (a
1161scalar) or a plural one (a list).
1162
1163=head3 Key/Value Hash Slices
1164
1165Starting in Perl 5.20, a hash slice operation
1166with the % symbol is a variant of slice operation
1167returning a list of key/value pairs rather than just values:
1168
1169    %h = (blonk => 2, foo => 3, squink => 5, bar => 8);
1170    %subset = %h{'foo', 'bar'}; # key/value hash slice
1171    # %subset is now (foo => 3, bar => 8)
1172    %removed = delete %h{'foo', 'bar'};
1173    # %removed is now (foo => 3, bar => 8)
1174    # %h is now (blonk => 2, squink => 5)
1175
1176However, the result of such a slice cannot be localized or assigned to.
1177These are otherwise very much consistent with hash slices
1178using the @ symbol.
1179
1180=head3 Index/Value Array Slices
1181
1182Similar to key/value hash slices (and also introduced
1183in Perl 5.20), the % array slice syntax returns a list
1184of index/value pairs:
1185
1186    @a = "a".."z";
1187    @list = %a[3,4,6];
1188    # @list is now (3, "d", 4, "e", 6, "g")
1189    @removed = delete %a[3,4,6]
1190    # @removed is now (3, "d", 4, "e", 6, "g")
1191    # @list[3,4,6] are now undef
1192
1193Note that calling L<C<delete>|perlfunc/delete EXPR> on array values is
1194strongly discouraged.
1195
1196=head2 Typeglobs and Filehandles
1197X<typeglob> X<filehandle> X<*>
1198
1199Perl uses an internal type called a I<typeglob> to hold an entire
1200symbol table entry.  The type prefix of a typeglob is a C<*>, because
1201it represents all types.  This used to be the preferred way to
1202pass arrays and hashes by reference into a function, but now that
1203we have real references, this is seldom needed.
1204
1205The main use of typeglobs in modern Perl is create symbol table aliases.
1206This assignment:
1207
1208    *this = *that;
1209
1210makes $this an alias for $that, @this an alias for @that, %this an alias
1211for %that, &this an alias for &that, etc.  Much safer is to use a reference.
1212This:
1213
1214    local *Here::blue = \$There::green;
1215
1216temporarily makes $Here::blue an alias for $There::green, but doesn't
1217make @Here::blue an alias for @There::green, or %Here::blue an alias for
1218%There::green, etc.  See L<perlmod/"Symbol Tables"> for more examples
1219of this.  Strange though this may seem, this is the basis for the whole
1220module import/export system.
1221
1222Another use for typeglobs is to pass filehandles into a function or
1223to create new filehandles.  If you need to use a typeglob to save away
1224a filehandle, do it this way:
1225
1226    $fh = *STDOUT;
1227
1228or perhaps as a real reference, like this:
1229
1230    $fh = \*STDOUT;
1231
1232See L<perlsub> for examples of using these as indirect filehandles
1233in functions.
1234
1235Typeglobs are also a way to create a local filehandle using the local()
1236operator.  These last until their block is exited, but may be passed back.
1237For example:
1238
1239    sub newopen {
1240        my $path = shift;
1241        local  *FH;  # not my!
1242        open   (FH, $path)          or  return undef;
1243        return *FH;
1244    }
1245    $fh = newopen('/etc/passwd');
1246
1247Now that we have the C<*foo{THING}> notation, typeglobs aren't used as much
1248for filehandle manipulations, although they're still needed to pass brand
1249new file and directory handles into or out of functions.  That's because
1250C<*HANDLE{IO}> only works if HANDLE has already been used as a handle.
1251In other words, C<*FH> must be used to create new symbol table entries;
1252C<*foo{THING}> cannot.  When in doubt, use C<*FH>.
1253
1254All functions that are capable of creating filehandles (open(),
1255opendir(), pipe(), socketpair(), sysopen(), socket(), and accept())
1256automatically create an anonymous filehandle if the handle passed to
1257them is an uninitialized scalar variable.  This allows the constructs
1258such as C<open(my $fh, ...)> and C<open(local $fh,...)> to be used to
1259create filehandles that will conveniently be closed automatically when
1260the scope ends, provided there are no other references to them.  This
1261largely eliminates the need for typeglobs when opening filehandles
1262that must be passed around, as in the following example:
1263
1264    sub myopen {
1265        open my $fh, "@_"
1266             or die "Can't open '@_': $!";
1267        return $fh;
1268    }
1269
1270    {
1271        my $f = myopen("</etc/motd");
1272        print <$f>;
1273        # $f implicitly closed here
1274    }
1275
1276Note that if an initialized scalar variable is used instead the
1277result is different: C<my $fh='zzz'; open($fh, ...)> is equivalent
1278to C<open( *{'zzz'}, ...)>.
1279C<use strict 'refs'> forbids such practice.
1280
1281Another way to create anonymous filehandles is with the Symbol
1282module or with the IO::Handle module and its ilk.  These modules
1283have the advantage of not hiding different types of the same name
1284during the local().  See the bottom of L<perlfunc/open> for an
1285example.
1286
1287=head1 SEE ALSO
1288
1289See L<perlvar> for a description of Perl's built-in variables and
1290a discussion of legal variable names.  See L<perlref>, L<perlsub>,
1291and L<perlmod/"Symbol Tables"> for more discussion on typeglobs and
1292the C<*foo{THING}> syntax.
1293