This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade to Time-HiRes-1.76
[perl5.git] / pod / perlfaq4.pod
1 =head1 NAME
2
3 perlfaq4 - Data Manipulation ($Revision: 1.67 $, $Date: 2005/08/10 15:55:49 $)
4
5 =head1 DESCRIPTION
6
7 This section of the FAQ answers questions related to manipulating
8 numbers, dates, strings, arrays, hashes, and miscellaneous data issues.
9
10 =head1 Data: Numbers
11
12 =head2 Why am I getting long decimals (eg, 19.9499999999999) instead of the numbers I should be getting (eg, 19.95)?
13
14 Internally, your computer represents floating-point numbers
15 in binary. Digital (as in powers of two) computers cannot
16 store all numbers exactly.  Some real numbers lose precision
17 in the process.  This is a problem with how computers store
18 numbers and affects all computer languages, not just Perl.
19
20 L<perlnumber> show the gory details of number
21 representations and conversions.
22
23 To limit the number of decimal places in your numbers, you
24 can use the printf or sprintf function.  See the
25 L<"Floating Point Arithmetic"|perlop> for more details.
26
27         printf "%.2f", 10/3;
28
29         my $number = sprintf "%.2f", 10/3;
30
31 =head2 Why is int() broken?
32
33 Your int() is most probably working just fine.  It's the numbers that
34 aren't quite what you think.
35
36 First, see the above item "Why am I getting long decimals
37 (eg, 19.9499999999999) instead of the numbers I should be getting
38 (eg, 19.95)?".
39
40 For example, this
41
42     print int(0.6/0.2-2), "\n";
43
44 will in most computers print 0, not 1, because even such simple
45 numbers as 0.6 and 0.2 cannot be presented exactly by floating-point
46 numbers.  What you think in the above as 'three' is really more like
47 2.9999999999999995559.
48
49 =head2 Why isn't my octal data interpreted correctly?
50
51 Perl only understands octal and hex numbers as such when they occur as
52 literals in your program.  Octal literals in perl must start with a
53 leading "0" and hexadecimal literals must start with a leading "0x".
54 If they are read in from somewhere and assigned, no automatic
55 conversion takes place.  You must explicitly use oct() or hex() if you
56 want the values converted to decimal.  oct() interprets hex ("0x350"),
57 octal ("0350" or even without the leading "0", like "377") and binary
58 ("0b1010") numbers, while hex() only converts hexadecimal ones, with
59 or without a leading "0x", like "0x255", "3A", "ff", or "deadbeef".
60 The inverse mapping from decimal to octal can be done with either the
61 "%o" or "%O" sprintf() formats.
62
63 This problem shows up most often when people try using chmod(), mkdir(),
64 umask(), or sysopen(), which by widespread tradition typically take
65 permissions in octal.
66
67     chmod(644,  $file); # WRONG
68     chmod(0644, $file); # right
69
70 Note the mistake in the first line was specifying the decimal literal
71 644, rather than the intended octal literal 0644.  The problem can
72 be seen with:
73
74     printf("%#o",644); # prints 01204
75
76 Surely you had not intended C<chmod(01204, $file);> - did you?  If you
77 want to use numeric literals as arguments to chmod() et al. then please
78 try to express them as octal constants, that is with a leading zero and
79 with the following digits restricted to the set 0..7.
80
81 =head2 Does Perl have a round() function?  What about ceil() and floor()?  Trig functions?
82
83 Remember that int() merely truncates toward 0.  For rounding to a
84 certain number of digits, sprintf() or printf() is usually the easiest
85 route.
86
87     printf("%.3f", 3.1415926535);       # prints 3.142
88
89 The POSIX module (part of the standard Perl distribution) implements
90 ceil(), floor(), and a number of other mathematical and trigonometric
91 functions.
92
93     use POSIX;
94     $ceil   = ceil(3.5);                        # 4
95     $floor  = floor(3.5);                       # 3
96
97 In 5.000 to 5.003 perls, trigonometry was done in the Math::Complex
98 module.  With 5.004, the Math::Trig module (part of the standard Perl
99 distribution) implements the trigonometric functions. Internally it
100 uses the Math::Complex module and some functions can break out from
101 the real axis into the complex plane, for example the inverse sine of
102 2.
103
104 Rounding in financial applications can have serious implications, and
105 the rounding method used should be specified precisely.  In these
106 cases, it probably pays not to trust whichever system rounding is
107 being used by Perl, but to instead implement the rounding function you
108 need yourself.
109
110 To see why, notice how you'll still have an issue on half-way-point
111 alternation:
112
113     for ($i = 0; $i < 1.01; $i += 0.05) { printf "%.1f ",$i}
114
115     0.0 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.7 0.7
116     0.8 0.8 0.9 0.9 1.0 1.0
117
118 Don't blame Perl.  It's the same as in C.  IEEE says we have to do this.
119 Perl numbers whose absolute values are integers under 2**31 (on 32 bit
120 machines) will work pretty much like mathematical integers.  Other numbers
121 are not guaranteed.
122
123 =head2 How do I convert between numeric representations/bases/radixes?
124
125 As always with Perl there is more than one way to do it.  Below
126 are a few examples of approaches to making common conversions
127 between number representations.  This is intended to be representational
128 rather than exhaustive.
129
130 Some of the examples below use the Bit::Vector module from CPAN.
131 The reason you might choose Bit::Vector over the perl built in
132 functions is that it works with numbers of ANY size, that it is
133 optimized for speed on some operations, and for at least some
134 programmers the notation might be familiar.
135
136 =over 4
137
138 =item How do I convert hexadecimal into decimal
139
140 Using perl's built in conversion of 0x notation:
141
142     $dec = 0xDEADBEEF;
143
144 Using the hex function:
145
146     $dec = hex("DEADBEEF");
147
148 Using pack:
149
150     $dec = unpack("N", pack("H8", substr("0" x 8 . "DEADBEEF", -8)));
151
152 Using the CPAN module Bit::Vector:
153
154     use Bit::Vector;
155     $vec = Bit::Vector->new_Hex(32, "DEADBEEF");
156     $dec = $vec->to_Dec();
157
158 =item How do I convert from decimal to hexadecimal
159
160 Using sprintf:
161
162     $hex = sprintf("%X", 3735928559); # upper case A-F
163     $hex = sprintf("%x", 3735928559); # lower case a-f
164
165 Using unpack:
166
167     $hex = unpack("H*", pack("N", 3735928559));
168
169 Using Bit::Vector:
170
171     use Bit::Vector;
172     $vec = Bit::Vector->new_Dec(32, -559038737);
173     $hex = $vec->to_Hex();
174
175 And Bit::Vector supports odd bit counts:
176
177     use Bit::Vector;
178     $vec = Bit::Vector->new_Dec(33, 3735928559);
179     $vec->Resize(32); # suppress leading 0 if unwanted
180     $hex = $vec->to_Hex();
181
182 =item How do I convert from octal to decimal
183
184 Using Perl's built in conversion of numbers with leading zeros:
185
186     $dec = 033653337357; # note the leading 0!
187
188 Using the oct function:
189
190     $dec = oct("33653337357");
191
192 Using Bit::Vector:
193
194     use Bit::Vector;
195     $vec = Bit::Vector->new(32);
196     $vec->Chunk_List_Store(3, split(//, reverse "33653337357"));
197     $dec = $vec->to_Dec();
198
199 =item How do I convert from decimal to octal
200
201 Using sprintf:
202
203     $oct = sprintf("%o", 3735928559);
204
205 Using Bit::Vector:
206
207     use Bit::Vector;
208     $vec = Bit::Vector->new_Dec(32, -559038737);
209     $oct = reverse join('', $vec->Chunk_List_Read(3));
210
211 =item How do I convert from binary to decimal
212
213 Perl 5.6 lets you write binary numbers directly with
214 the 0b notation:
215
216     $number = 0b10110110;
217
218 Using oct:
219
220     my $input = "10110110";
221     $decimal = oct( "0b$input" );
222
223 Using pack and ord:
224
225     $decimal = ord(pack('B8', '10110110'));
226
227 Using pack and unpack for larger strings:
228
229     $int = unpack("N", pack("B32",
230         substr("0" x 32 . "11110101011011011111011101111", -32)));
231     $dec = sprintf("%d", $int);
232
233     # substr() is used to left pad a 32 character string with zeros.
234
235 Using Bit::Vector:
236
237     $vec = Bit::Vector->new_Bin(32, "11011110101011011011111011101111");
238     $dec = $vec->to_Dec();
239
240 =item How do I convert from decimal to binary
241
242 Using sprintf (perl 5.6+):
243
244     $bin = sprintf("%b", 3735928559);
245
246 Using unpack:
247
248     $bin = unpack("B*", pack("N", 3735928559));
249
250 Using Bit::Vector:
251
252     use Bit::Vector;
253     $vec = Bit::Vector->new_Dec(32, -559038737);
254     $bin = $vec->to_Bin();
255
256 The remaining transformations (e.g. hex -> oct, bin -> hex, etc.)
257 are left as an exercise to the inclined reader.
258
259 =back
260
261 =head2 Why doesn't & work the way I want it to?
262
263 The behavior of binary arithmetic operators depends on whether they're
264 used on numbers or strings.  The operators treat a string as a series
265 of bits and work with that (the string C<"3"> is the bit pattern
266 C<00110011>).  The operators work with the binary form of a number
267 (the number C<3> is treated as the bit pattern C<00000011>).
268
269 So, saying C<11 & 3> performs the "and" operation on numbers (yielding
270 C<3>).  Saying C<"11" & "3"> performs the "and" operation on strings
271 (yielding C<"1">).
272
273 Most problems with C<&> and C<|> arise because the programmer thinks
274 they have a number but really it's a string.  The rest arise because
275 the programmer says:
276
277     if ("\020\020" & "\101\101") {
278         # ...
279     }
280
281 but a string consisting of two null bytes (the result of C<"\020\020"
282 & "\101\101">) is not a false value in Perl.  You need:
283
284     if ( ("\020\020" & "\101\101") !~ /[^\000]/) {
285         # ...
286     }
287
288 =head2 How do I multiply matrices?
289
290 Use the Math::Matrix or Math::MatrixReal modules (available from CPAN)
291 or the PDL extension (also available from CPAN).
292
293 =head2 How do I perform an operation on a series of integers?
294
295 To call a function on each element in an array, and collect the
296 results, use:
297
298     @results = map { my_func($_) } @array;
299
300 For example:
301
302     @triple = map { 3 * $_ } @single;
303
304 To call a function on each element of an array, but ignore the
305 results:
306
307     foreach $iterator (@array) {
308         some_func($iterator);
309     }
310
311 To call a function on each integer in a (small) range, you B<can> use:
312
313     @results = map { some_func($_) } (5 .. 25);
314
315 but you should be aware that the C<..> operator creates an array of
316 all integers in the range.  This can take a lot of memory for large
317 ranges.  Instead use:
318
319     @results = ();
320     for ($i=5; $i < 500_005; $i++) {
321         push(@results, some_func($i));
322     }
323
324 This situation has been fixed in Perl5.005. Use of C<..> in a C<for>
325 loop will iterate over the range, without creating the entire range.
326
327     for my $i (5 .. 500_005) {
328         push(@results, some_func($i));
329     }
330
331 will not create a list of 500,000 integers.
332
333 =head2 How can I output Roman numerals?
334
335 Get the http://www.cpan.org/modules/by-module/Roman module.
336
337 =head2 Why aren't my random numbers random?
338
339 If you're using a version of Perl before 5.004, you must call C<srand>
340 once at the start of your program to seed the random number generator.
341
342          BEGIN { srand() if $] < 5.004 }
343
344 5.004 and later automatically call C<srand> at the beginning.  Don't
345 call C<srand> more than once---you make your numbers less random, rather
346 than more.
347
348 Computers are good at being predictable and bad at being random
349 (despite appearances caused by bugs in your programs :-).  see the
350 F<random> article in the "Far More Than You Ever Wanted To Know"
351 collection in http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz , courtesy of
352 Tom Phoenix, talks more about this.  John von Neumann said, "Anyone
353 who attempts to generate random numbers by deterministic means is, of
354 course, living in a state of sin."
355
356 If you want numbers that are more random than C<rand> with C<srand>
357 provides, you should also check out the Math::TrulyRandom module from
358 CPAN.  It uses the imperfections in your system's timer to generate
359 random numbers, but this takes quite a while.  If you want a better
360 pseudorandom generator than comes with your operating system, look at
361 "Numerical Recipes in C" at http://www.nr.com/ .
362
363 =head2 How do I get a random number between X and Y?
364
365 C<rand($x)> returns a number such that
366 C<< 0 <= rand($x) < $x >>. Thus what you want to have perl
367 figure out is a random number in the range from 0 to the
368 difference between your I<X> and I<Y>.
369
370 That is, to get a number between 10 and 15, inclusive, you
371 want a random number between 0 and 5 that you can then add
372 to 10.
373
374     my $number = 10 + int rand( 15-10+1 );
375
376 Hence you derive the following simple function to abstract
377 that. It selects a random integer between the two given
378 integers (inclusive), For example: C<random_int_in(50,120)>.
379
380    sub random_int_in ($$) {
381      my($min, $max) = @_;
382       # Assumes that the two arguments are integers themselves!
383      return $min if $min == $max;
384      ($min, $max) = ($max, $min)  if  $min > $max;
385      return $min + int rand(1 + $max - $min);
386    }
387
388 =head1 Data: Dates
389
390 =head2 How do I find the day or week of the year?
391
392 The localtime function returns the day of the year.  Without an
393 argument localtime uses the current time.
394
395     $day_of_year = (localtime)[7];
396
397 The POSIX module can also format a date as the day of the year or
398 week of the year.
399
400         use POSIX qw/strftime/;
401         my $day_of_year  = strftime "%j", localtime;
402         my $week_of_year = strftime "%W", localtime;
403
404 To get the day of year for any date, use the Time::Local module to get
405 a time in epoch seconds for the argument to localtime.
406
407         use POSIX qw/strftime/;
408         use Time::Local;
409         my $week_of_year = strftime "%W",
410                 localtime( timelocal( 0, 0, 0, 18, 11, 1987 ) );
411
412 The Date::Calc module provides two functions to calculate these.
413
414         use Date::Calc;
415         my $day_of_year  = Day_of_Year(  1987, 12, 18 );
416         my $week_of_year = Week_of_Year( 1987, 12, 18 );
417
418 =head2 How do I find the current century or millennium?
419
420 Use the following simple functions:
421
422     sub get_century    {
423         return int((((localtime(shift || time))[5] + 1999))/100);
424     }
425
426     sub get_millennium {
427         return 1+int((((localtime(shift || time))[5] + 1899))/1000);
428     }
429
430 On some systems, the POSIX module's strftime() function has
431 been extended in a non-standard way to use a C<%C> format,
432 which they sometimes claim is the "century".  It isn't,
433 because on most such systems, this is only the first two
434 digits of the four-digit year, and thus cannot be used to
435 reliably determine the current century or millennium.
436
437 =head2 How can I compare two dates and find the difference?
438
439 (contributed by brian d foy)
440
441 You could just store all your dates as a number and then subtract. Life
442 isn't always that simple though. If you want to work with formatted
443 dates, the Date::Manip, Date::Calc, or DateTime modules can help you.
444
445
446 =head2 How can I take a string and turn it into epoch seconds?
447
448 If it's a regular enough string that it always has the same format,
449 you can split it up and pass the parts to C<timelocal> in the standard
450 Time::Local module.  Otherwise, you should look into the Date::Calc
451 and Date::Manip modules from CPAN.
452
453 =head2 How can I find the Julian Day?
454
455 (contributed by brian d foy and Dave Cross)
456
457 You can use the Time::JulianDay module available on CPAN.  Ensure that
458 you really want to find a Julian day, though, as many people have
459 different ideas about Julian days.  See
460 http://www.hermetic.ch/cal_stud/jdn.htm for instance.
461
462 You can also try the DateTime module, which can convert a date/time
463 to a Julian Day.
464
465   $ perl -MDateTime -le'print DateTime->today->jd'
466   2453401.5
467
468 Or the modified Julian Day
469
470   $ perl -MDateTime -le'print DateTime->today->mjd'
471   53401
472
473 Or even the day of the year (which is what some people think of as a
474 Julian day)
475
476   $ perl -MDateTime -le'print DateTime->today->doy'
477   31
478
479 =head2 How do I find yesterday's date?
480
481 (contributed by brian d foy)
482
483 Use one of the Date modules. The C<DateTime> module makes it simple, and
484 give you the same time of day, only the day before.
485
486         use DateTime;
487         
488         my $yesterday = DateTime->now->subtract( days => 1 );
489         
490         print "Yesterday was $yesterday\n";
491
492 You can also use the C<Date::Calc> module using its Today_and_Now
493 function.
494
495         use Date::Calc qw( Today_and_Now Add_Delta_DHMS );
496         
497         my @date_time = Add_Delta_DHMS( Today_and_Now(), -1, 0, 0, 0 );
498         
499         print "@date\n";
500         
501 Most people try to use the time rather than the calendar to figure out
502 dates, but that assumes that days are twenty-four hours each.  For
503 most people, there are two days a year when they aren't: the switch to
504 and from summer time throws this off. Let the modules do the work.
505
506 =head2 Does Perl have a Year 2000 problem?  Is Perl Y2K compliant?
507
508 Short answer: No, Perl does not have a Year 2000 problem.  Yes, Perl is
509 Y2K compliant (whatever that means).  The programmers you've hired to
510 use it, however, probably are not.
511
512 Long answer: The question belies a true understanding of the issue.
513 Perl is just as Y2K compliant as your pencil--no more, and no less.
514 Can you use your pencil to write a non-Y2K-compliant memo?  Of course
515 you can.  Is that the pencil's fault?  Of course it isn't.
516
517 The date and time functions supplied with Perl (gmtime and localtime)
518 supply adequate information to determine the year well beyond 2000
519 (2038 is when trouble strikes for 32-bit machines).  The year returned
520 by these functions when used in a list context is the year minus 1900.
521 For years between 1910 and 1999 this I<happens> to be a 2-digit decimal
522 number. To avoid the year 2000 problem simply do not treat the year as
523 a 2-digit number.  It isn't.
524
525 When gmtime() and localtime() are used in scalar context they return
526 a timestamp string that contains a fully-expanded year.  For example,
527 C<$timestamp = gmtime(1005613200)> sets $timestamp to "Tue Nov 13 01:00:00
528 2001".  There's no year 2000 problem here.
529
530 That doesn't mean that Perl can't be used to create non-Y2K compliant
531 programs.  It can.  But so can your pencil.  It's the fault of the user,
532 not the language.  At the risk of inflaming the NRA: "Perl doesn't
533 break Y2K, people do."  See http://www.perl.org/about/y2k.html for
534 a longer exposition.
535
536 =head1 Data: Strings
537
538 =head2 How do I validate input?
539
540 (contributed by brian d foy)
541
542 There are many ways to ensure that values are what you expect or
543 want to accept. Besides the specific examples that we cover in the
544 perlfaq, you can also look at the modules with "Assert" and "Validate"
545 in their names, along with other modules such as C<Regexp::Common>.
546
547 Some modules have validation for particular types of input, such
548 as C<Business::ISBN>, C<Business::CreditCard>, C<Email::Valid>,
549 and C<Data::Validate::IP>.
550
551 =head2 How do I unescape a string?
552
553 It depends just what you mean by "escape".  URL escapes are dealt
554 with in L<perlfaq9>.  Shell escapes with the backslash (C<\>)
555 character are removed with
556
557     s/\\(.)/$1/g;
558
559 This won't expand C<"\n"> or C<"\t"> or any other special escapes.
560
561 =head2 How do I remove consecutive pairs of characters?
562
563 (contributed by brian d foy)
564
565 You can use the substitution operator to find pairs of characters (or
566 runs of characters) and replace them with a single instance. In this
567 substitution, we find a character in C<(.)>. The memory parentheses
568 store the matched character in the back-reference C<\1> and we use
569 that to require that the same thing immediately follow it. We replace
570 that part of the string with the character in C<$1>.
571
572     s/(.)\1/$1/g;
573
574 We can also use the transliteration operator, C<tr///>. In this
575 example, the search list side of our C<tr///> contains nothing, but
576 the C<c> option complements that so it contains everything. The
577 replacement list also contains nothing, so the transliteration is
578 almost a no-op since it won't do any replacements (or more exactly,
579 replace the character with itself). However, the C<s> option squashes
580 duplicated and consecutive characters in the string so a character
581 does not show up next to itself
582
583         my $str = 'Haarlem';   # in the Netherlands
584     $str =~ tr///cs;       # Now Harlem, like in New York
585
586 =head2 How do I expand function calls in a string?
587
588 (contributed by brian d foy)
589
590 This is documented in L<perlref>, and although it's not the easiest
591 thing to read, it does work. In each of these examples, we call the
592 function inside the braces of used to dereference a reference. If we
593 have a more than one return value, we can construct and dereference an
594 anonymous array. In this case, we call the function in list context.
595
596     print "The time values are @{ [localtime] }.\n";
597
598 If we want to call the function in scalar context, we have to do a bit
599 more work. We can really have any code we like inside the braces, so
600 we simply have to end with the scalar reference, although how you do
601 that is up to you, and you can use code inside the braces.
602
603         print "The time is ${\(scalar localtime)}.\n"
604         
605         print "The time is ${ my $x = localtime; \$x }.\n";
606         
607 If your function already returns a reference, you don't need to create
608 the reference yourself.
609
610         sub timestamp { my $t = localtime; \$t }
611         
612         print "The time is ${ timestamp() }.\n";
613         
614 In most cases, it is probably easier to simply use string
615 concatenation, which also forces scalar context.
616
617         print "The time is " . localtime . ".\n";
618
619 =head2 How do I find matching/nesting anything?
620
621 This isn't something that can be done in one regular expression, no
622 matter how complicated.  To find something between two single
623 characters, a pattern like C</x([^x]*)x/> will get the intervening
624 bits in $1. For multiple ones, then something more like
625 C</alpha(.*?)omega/> would be needed.  But none of these deals with
626 nested patterns.  For balanced expressions using C<(>, C<{>, C<[> or
627 C<< < >> as delimiters, use the CPAN module Regexp::Common, or see
628 L<perlre/(??{ code })>.  For other cases, you'll have to write a
629 parser.
630
631 If you are serious about writing a parser, there are a number of
632 modules or oddities that will make your life a lot easier.  There are
633 the CPAN modules Parse::RecDescent, Parse::Yapp, and Text::Balanced;
634 and the byacc program.   Starting from perl 5.8 the Text::Balanced is
635 part of the standard distribution.
636
637 One simple destructive, inside-out approach that you might try is to
638 pull out the smallest nesting parts one at a time:
639
640     while (s/BEGIN((?:(?!BEGIN)(?!END).)*)END//gs) {
641         # do something with $1
642     }
643
644 A more complicated and sneaky approach is to make Perl's regular
645 expression engine do it for you.  This is courtesy Dean Inada, and
646 rather has the nature of an Obfuscated Perl Contest entry, but it
647 really does work:
648
649     # $_ contains the string to parse
650     # BEGIN and END are the opening and closing markers for the
651     # nested text.
652
653     @( = ('(','');
654     @) = (')','');
655     ($re=$_)=~s/((BEGIN)|(END)|.)/$)[!$3]\Q$1\E$([!$2]/gs;
656     @$ = (eval{/$re/},$@!~/unmatched/i);
657     print join("\n",@$[0..$#$]) if( $$[-1] );
658
659 =head2 How do I reverse a string?
660
661 Use reverse() in scalar context, as documented in
662 L<perlfunc/reverse>.
663
664     $reversed = reverse $string;
665
666 =head2 How do I expand tabs in a string?
667
668 You can do it yourself:
669
670     1 while $string =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e;
671
672 Or you can just use the Text::Tabs module (part of the standard Perl
673 distribution).
674
675     use Text::Tabs;
676     @expanded_lines = expand(@lines_with_tabs);
677
678 =head2 How do I reformat a paragraph?
679
680 Use Text::Wrap (part of the standard Perl distribution):
681
682     use Text::Wrap;
683     print wrap("\t", '  ', @paragraphs);
684
685 The paragraphs you give to Text::Wrap should not contain embedded
686 newlines.  Text::Wrap doesn't justify the lines (flush-right).
687
688 Or use the CPAN module Text::Autoformat.  Formatting files can be easily
689 done by making a shell alias, like so:
690
691     alias fmt="perl -i -MText::Autoformat -n0777 \
692         -e 'print autoformat $_, {all=>1}' $*"
693
694 See the documentation for Text::Autoformat to appreciate its many
695 capabilities.
696
697 =head2 How can I access or change N characters of a string?
698
699 You can access the first characters of a string with substr().
700 To get the first character, for example, start at position 0
701 and grab the string of length 1.
702
703
704         $string = "Just another Perl Hacker";
705     $first_char = substr( $string, 0, 1 );  #  'J'
706
707 To change part of a string, you can use the optional fourth
708 argument which is the replacement string.
709
710     substr( $string, 13, 4, "Perl 5.8.0" );
711
712 You can also use substr() as an lvalue.
713
714     substr( $string, 13, 4 ) =  "Perl 5.8.0";
715
716 =head2 How do I change the Nth occurrence of something?
717
718 You have to keep track of N yourself.  For example, let's say you want
719 to change the fifth occurrence of C<"whoever"> or C<"whomever"> into
720 C<"whosoever"> or C<"whomsoever">, case insensitively.  These
721 all assume that $_ contains the string to be altered.
722
723     $count = 0;
724     s{((whom?)ever)}{
725         ++$count == 5           # is it the 5th?
726             ? "${2}soever"      # yes, swap
727             : $1                # renege and leave it there
728     }ige;
729
730 In the more general case, you can use the C</g> modifier in a C<while>
731 loop, keeping count of matches.
732
733     $WANT = 3;
734     $count = 0;
735     $_ = "One fish two fish red fish blue fish";
736     while (/(\w+)\s+fish\b/gi) {
737         if (++$count == $WANT) {
738             print "The third fish is a $1 one.\n";
739         }
740     }
741
742 That prints out: C<"The third fish is a red one.">  You can also use a
743 repetition count and repeated pattern like this:
744
745     /(?:\w+\s+fish\s+){2}(\w+)\s+fish/i;
746
747 =head2 How can I count the number of occurrences of a substring within a string?
748
749 There are a number of ways, with varying efficiency.  If you want a
750 count of a certain single character (X) within a string, you can use the
751 C<tr///> function like so:
752
753     $string = "ThisXlineXhasXsomeXx'sXinXit";
754     $count = ($string =~ tr/X//);
755     print "There are $count X characters in the string";
756
757 This is fine if you are just looking for a single character.  However,
758 if you are trying to count multiple character substrings within a
759 larger string, C<tr///> won't work.  What you can do is wrap a while()
760 loop around a global pattern match.  For example, let's count negative
761 integers:
762
763     $string = "-9 55 48 -2 23 -76 4 14 -44";
764     while ($string =~ /-\d+/g) { $count++ }
765     print "There are $count negative numbers in the string";
766
767 Another version uses a global match in list context, then assigns the
768 result to a scalar, producing a count of the number of matches.
769
770         $count = () = $string =~ /-\d+/g;
771
772 =head2 How do I capitalize all the words on one line?
773
774 To make the first letter of each word upper case:
775
776         $line =~ s/\b(\w)/\U$1/g;
777
778 This has the strange effect of turning "C<don't do it>" into "C<Don'T
779 Do It>".  Sometimes you might want this.  Other times you might need a
780 more thorough solution (Suggested by brian d foy):
781
782     $string =~ s/ (
783                  (^\w)    #at the beginning of the line
784                    |      # or
785                  (\s\w)   #preceded by whitespace
786                    )
787                 /\U$1/xg;
788     $string =~ /([\w']+)/\u\L$1/g;
789
790 To make the whole line upper case:
791
792         $line = uc($line);
793
794 To force each word to be lower case, with the first letter upper case:
795
796         $line =~ s/(\w+)/\u\L$1/g;
797
798 You can (and probably should) enable locale awareness of those
799 characters by placing a C<use locale> pragma in your program.
800 See L<perllocale> for endless details on locales.
801
802 This is sometimes referred to as putting something into "title
803 case", but that's not quite accurate.  Consider the proper
804 capitalization of the movie I<Dr. Strangelove or: How I Learned to
805 Stop Worrying and Love the Bomb>, for example.
806
807 Damian Conway's L<Text::Autoformat> module provides some smart
808 case transformations:
809
810     use Text::Autoformat;
811     my $x = "Dr. Strangelove or: How I Learned to Stop ".
812       "Worrying and Love the Bomb";
813
814     print $x, "\n";
815     for my $style (qw( sentence title highlight ))
816     {
817         print autoformat($x, { case => $style }), "\n";
818     }
819
820 =head2 How can I split a [character] delimited string except when inside [character]?
821
822 Several modules can handle this sort of pasing---Text::Balanced,
823 Text::CSV, Text::CSV_XS, and Text::ParseWords, among others.
824
825 Take the example case of trying to split a string that is
826 comma-separated into its different fields. You can't use C<split(/,/)>
827 because you shouldn't split if the comma is inside quotes.  For
828 example, take a data line like this:
829
830     SAR001,"","Cimetrix, Inc","Bob Smith","CAM",N,8,1,0,7,"Error, Core Dumped"
831
832 Due to the restriction of the quotes, this is a fairly complex
833 problem.  Thankfully, we have Jeffrey Friedl, author of
834 I<Mastering Regular Expressions>, to handle these for us.  He
835 suggests (assuming your string is contained in $text):
836
837      @new = ();
838      push(@new, $+) while $text =~ m{
839          "([^\"\\]*(?:\\.[^\"\\]*)*)",?  # groups the phrase inside the quotes
840        | ([^,]+),?
841        | ,
842      }gx;
843      push(@new, undef) if substr($text,-1,1) eq ',';
844
845 If you want to represent quotation marks inside a
846 quotation-mark-delimited field, escape them with backslashes (eg,
847 C<"like \"this\"">.
848
849 Alternatively, the Text::ParseWords module (part of the standard Perl
850 distribution) lets you say:
851
852     use Text::ParseWords;
853     @new = quotewords(",", 0, $text);
854
855 There's also a Text::CSV (Comma-Separated Values) module on CPAN.
856
857 =head2 How do I strip blank space from the beginning/end of a string?
858
859 (contributed by brian d foy)
860
861 A substitution can do this for you. For a single line, you want to
862 replace all the leading or trailing whitespace with nothing. You
863 can do that with a pair of substitutions.
864
865         s/^\s+//;
866         s/\s+$//;
867
868 You can also write that as a single substitution, although it turns
869 out the combined statement is slower than the separate ones. That
870 might not matter to you, though.
871
872         s/^\s+|\s+$//g;
873
874 In this regular expression, the alternation matches either at the
875 beginning or the end of the string since the anchors have a lower
876 precedence than the alternation. With the C</g> flag, the substitution
877 makes all possible matches, so it gets both. Remember, the trailing
878 newline matches the C<\s+>, and  the C<$> anchor can match to the
879 physical end of the string, so the newline disappears too. Just add
880 the newline to the output, which has the added benefit of preserving
881 "blank" (consisting entirely of whitespace) lines which the C<^\s+>
882 would remove all by itself.
883
884         while( <> )
885                 {
886                 s/^\s+|\s+$//g;
887                 print "$_\n";
888                 }
889
890 For a multi-line string, you can apply the regular expression
891 to each logical line in the string by adding the C</m> flag (for
892 "multi-line"). With the C</m> flag, the C<$> matches I<before> an
893 embedded newline, so it doesn't remove it. It still removes the
894 newline at the end of the string.
895
896     $string =~ s/^\s+|\s+$//gm;
897
898 Remember that lines consisting entirely of whitespace will disappear,
899 since the first part of the alternation can match the entire string
900 and replace it with nothing. If need to keep embedded blank lines,
901 you have to do a little more work. Instead of matching any whitespace
902 (since that includes a newline), just match the other whitespace.
903
904         $string =~ s/^[\t\f ]+|[\t\f ]+$//mg;
905
906 =head2 How do I pad a string with blanks or pad a number with zeroes?
907
908 In the following examples, C<$pad_len> is the length to which you wish
909 to pad the string, C<$text> or C<$num> contains the string to be padded,
910 and C<$pad_char> contains the padding character. You can use a single
911 character string constant instead of the C<$pad_char> variable if you
912 know what it is in advance. And in the same way you can use an integer in
913 place of C<$pad_len> if you know the pad length in advance.
914
915 The simplest method uses the C<sprintf> function. It can pad on the left
916 or right with blanks and on the left with zeroes and it will not
917 truncate the result. The C<pack> function can only pad strings on the
918 right with blanks and it will truncate the result to a maximum length of
919 C<$pad_len>.
920
921     # Left padding a string with blanks (no truncation):
922         $padded = sprintf("%${pad_len}s", $text);
923         $padded = sprintf("%*s", $pad_len, $text);  # same thing
924
925     # Right padding a string with blanks (no truncation):
926         $padded = sprintf("%-${pad_len}s", $text);
927         $padded = sprintf("%-*s", $pad_len, $text); # same thing
928
929     # Left padding a number with 0 (no truncation):
930         $padded = sprintf("%0${pad_len}d", $num);
931         $padded = sprintf("%0*d", $pad_len, $num); # same thing
932
933     # Right padding a string with blanks using pack (will truncate):
934     $padded = pack("A$pad_len",$text);
935
936 If you need to pad with a character other than blank or zero you can use
937 one of the following methods.  They all generate a pad string with the
938 C<x> operator and combine that with C<$text>. These methods do
939 not truncate C<$text>.
940
941 Left and right padding with any character, creating a new string:
942
943     $padded = $pad_char x ( $pad_len - length( $text ) ) . $text;
944     $padded = $text . $pad_char x ( $pad_len - length( $text ) );
945
946 Left and right padding with any character, modifying C<$text> directly:
947
948     substr( $text, 0, 0 ) = $pad_char x ( $pad_len - length( $text ) );
949     $text .= $pad_char x ( $pad_len - length( $text ) );
950
951 =head2 How do I extract selected columns from a string?
952
953 Use substr() or unpack(), both documented in L<perlfunc>.
954 If you prefer thinking in terms of columns instead of widths,
955 you can use this kind of thing:
956
957     # determine the unpack format needed to split Linux ps output
958     # arguments are cut columns
959     my $fmt = cut2fmt(8, 14, 20, 26, 30, 34, 41, 47, 59, 63, 67, 72);
960
961     sub cut2fmt {
962         my(@positions) = @_;
963         my $template  = '';
964         my $lastpos   = 1;
965         for my $place (@positions) {
966             $template .= "A" . ($place - $lastpos) . " ";
967             $lastpos   = $place;
968         }
969         $template .= "A*";
970         return $template;
971     }
972
973 =head2 How do I find the soundex value of a string?
974
975 (contributed by brian d foy)
976
977 You can use the Text::Soundex module. If you want to do fuzzy or close
978 matching, you might also try the String::Approx, and Text::Metaphone,
979 and Text::DoubleMetaphone modules.
980
981 =head2 How can I expand variables in text strings?
982
983 Let's assume that you have a string that contains placeholder
984 variables.
985
986     $text = 'this has a $foo in it and a $bar';
987
988 You can use a substitution with a double evaluation.  The
989 first /e turns C<$1> into C<$foo>, and the second /e turns
990 C<$foo> into its value.  You may want to wrap this in an
991 C<eval>: if you try to get the value of an undeclared variable
992 while running under C<use strict>, you get a fatal error.
993
994     eval { $text =~ s/(\$\w+)/$1/eeg };
995     die if $@;
996
997 It's probably better in the general case to treat those
998 variables as entries in some special hash.  For example:
999
1000     %user_defs = (
1001         foo  => 23,
1002         bar  => 19,
1003     );
1004     $text =~ s/\$(\w+)/$user_defs{$1}/g;
1005
1006 =head2 What's wrong with always quoting "$vars"?
1007
1008 The problem is that those double-quotes force stringification--
1009 coercing numbers and references into strings--even when you
1010 don't want them to be strings.  Think of it this way: double-quote
1011 expansion is used to produce new strings.  If you already
1012 have a string, why do you need more?
1013
1014 If you get used to writing odd things like these:
1015
1016     print "$var";       # BAD
1017     $new = "$old";      # BAD
1018     somefunc("$var");   # BAD
1019
1020 You'll be in trouble.  Those should (in 99.8% of the cases) be
1021 the simpler and more direct:
1022
1023     print $var;
1024     $new = $old;
1025     somefunc($var);
1026
1027 Otherwise, besides slowing you down, you're going to break code when
1028 the thing in the scalar is actually neither a string nor a number, but
1029 a reference:
1030
1031     func(\@array);
1032     sub func {
1033         my $aref = shift;
1034         my $oref = "$aref";  # WRONG
1035     }
1036
1037 You can also get into subtle problems on those few operations in Perl
1038 that actually do care about the difference between a string and a
1039 number, such as the magical C<++> autoincrement operator or the
1040 syscall() function.
1041
1042 Stringification also destroys arrays.
1043
1044     @lines = `command`;
1045     print "@lines";             # WRONG - extra blanks
1046     print @lines;               # right
1047
1048 =head2 Why don't my E<lt>E<lt>HERE documents work?
1049
1050 Check for these three things:
1051
1052 =over 4
1053
1054 =item There must be no space after the E<lt>E<lt> part.
1055
1056 =item There (probably) should be a semicolon at the end.
1057
1058 =item You can't (easily) have any space in front of the tag.
1059
1060 =back
1061
1062 If you want to indent the text in the here document, you
1063 can do this:
1064
1065     # all in one
1066     ($VAR = <<HERE_TARGET) =~ s/^\s+//gm;
1067         your text
1068         goes here
1069     HERE_TARGET
1070
1071 But the HERE_TARGET must still be flush against the margin.
1072 If you want that indented also, you'll have to quote
1073 in the indentation.
1074
1075     ($quote = <<'    FINIS') =~ s/^\s+//gm;
1076             ...we will have peace, when you and all your works have
1077             perished--and the works of your dark master to whom you
1078             would deliver us. You are a liar, Saruman, and a corrupter
1079             of men's hearts.  --Theoden in /usr/src/perl/taint.c
1080         FINIS
1081     $quote =~ s/\s+--/\n--/;
1082
1083 A nice general-purpose fixer-upper function for indented here documents
1084 follows.  It expects to be called with a here document as its argument.
1085 It looks to see whether each line begins with a common substring, and
1086 if so, strips that substring off.  Otherwise, it takes the amount of leading
1087 whitespace found on the first line and removes that much off each
1088 subsequent line.
1089
1090     sub fix {
1091         local $_ = shift;
1092         my ($white, $leader);  # common whitespace and common leading string
1093         if (/^\s*(?:([^\w\s]+)(\s*).*\n)(?:\s*\1\2?.*\n)+$/) {
1094             ($white, $leader) = ($2, quotemeta($1));
1095         } else {
1096             ($white, $leader) = (/^(\s+)/, '');
1097         }
1098         s/^\s*?$leader(?:$white)?//gm;
1099         return $_;
1100     }
1101
1102 This works with leading special strings, dynamically determined:
1103
1104     $remember_the_main = fix<<'    MAIN_INTERPRETER_LOOP';
1105         @@@ int
1106         @@@ runops() {
1107         @@@     SAVEI32(runlevel);
1108         @@@     runlevel++;
1109         @@@     while ( op = (*op->op_ppaddr)() );
1110         @@@     TAINT_NOT;
1111         @@@     return 0;
1112         @@@ }
1113     MAIN_INTERPRETER_LOOP
1114
1115 Or with a fixed amount of leading whitespace, with remaining
1116 indentation correctly preserved:
1117
1118     $poem = fix<<EVER_ON_AND_ON;
1119        Now far ahead the Road has gone,
1120           And I must follow, if I can,
1121        Pursuing it with eager feet,
1122           Until it joins some larger way
1123        Where many paths and errands meet.
1124           And whither then? I cannot say.
1125                 --Bilbo in /usr/src/perl/pp_ctl.c
1126     EVER_ON_AND_ON
1127
1128 =head1 Data: Arrays
1129
1130 =head2 What is the difference between a list and an array?
1131
1132 An array has a changeable length.  A list does not.  An array is something
1133 you can push or pop, while a list is a set of values.  Some people make
1134 the distinction that a list is a value while an array is a variable.
1135 Subroutines are passed and return lists, you put things into list
1136 context, you initialize arrays with lists, and you foreach() across
1137 a list.  C<@> variables are arrays, anonymous arrays are arrays, arrays
1138 in scalar context behave like the number of elements in them, subroutines
1139 access their arguments through the array C<@_>, and push/pop/shift only work
1140 on arrays.
1141
1142 As a side note, there's no such thing as a list in scalar context.
1143 When you say
1144
1145     $scalar = (2, 5, 7, 9);
1146
1147 you're using the comma operator in scalar context, so it uses the scalar
1148 comma operator.  There never was a list there at all!  This causes the
1149 last value to be returned: 9.
1150
1151 =head2 What is the difference between $array[1] and @array[1]?
1152
1153 The former is a scalar value; the latter an array slice, making
1154 it a list with one (scalar) value.  You should use $ when you want a
1155 scalar value (most of the time) and @ when you want a list with one
1156 scalar value in it (very, very rarely; nearly never, in fact).
1157
1158 Sometimes it doesn't make a difference, but sometimes it does.
1159 For example, compare:
1160
1161     $good[0] = `some program that outputs several lines`;
1162
1163 with
1164
1165     @bad[0]  = `same program that outputs several lines`;
1166
1167 The C<use warnings> pragma and the B<-w> flag will warn you about these
1168 matters.
1169
1170 =head2 How can I remove duplicate elements from a list or array?
1171
1172 (contributed by brian d foy)
1173
1174 Use a hash. When you think the words "unique" or "duplicated", think
1175 "hash keys".
1176
1177 If you don't care about the order of the elements, you could just
1178 create the hash then extract the keys. It's not important how you
1179 create that hash: just that you use C<keys> to get the unique
1180 elements.
1181
1182    my %hash   = map { $_, 1 } @array;
1183    # or a hash slice: @hash{ @array } = ();
1184    # or a foreach: $hash{$_} = 1 foreach ( @array );
1185
1186    my @unique = keys %hash;
1187
1188 You can also go through each element and skip the ones you've seen
1189 before. Use a hash to keep track. The first time the loop sees an
1190 element, that element has no key in C<%Seen>. The C<next> statement
1191 creates the key and immediately uses its value, which is C<undef>, so
1192 the loop continues to the C<push> and increments the value for that
1193 key. The next time the loop sees that same element, its key exists in
1194 the hash I<and> the value for that key is true (since it's not 0 or
1195 undef), so the next skips that iteration and the loop goes to the next
1196 element.
1197
1198         my @unique = ();
1199         my %seen   = ();
1200
1201         foreach my $elem ( @array )
1202                 {
1203                 next if $seen{ $elem }++;
1204                 push @unique, $elem;
1205                 }
1206
1207 You can write this more briefly using a grep, which does the
1208 same thing.
1209
1210    my %seen = ();
1211    my @unique = grep { ! $seen{ $_ }++ } @array;
1212
1213 =head2 How can I tell whether a certain element is contained in a list or array?
1214
1215 Hearing the word "in" is an I<in>dication that you probably should have
1216 used a hash, not a list or array, to store your data.  Hashes are
1217 designed to answer this question quickly and efficiently.  Arrays aren't.
1218
1219 That being said, there are several ways to approach this.  If you
1220 are going to make this query many times over arbitrary string values,
1221 the fastest way is probably to invert the original array and maintain a
1222 hash whose keys are the first array's values.
1223
1224     @blues = qw/azure cerulean teal turquoise lapis-lazuli/;
1225     %is_blue = ();
1226     for (@blues) { $is_blue{$_} = 1 }
1227
1228 Now you can check whether $is_blue{$some_color}.  It might have been a
1229 good idea to keep the blues all in a hash in the first place.
1230
1231 If the values are all small integers, you could use a simple indexed
1232 array.  This kind of an array will take up less space:
1233
1234     @primes = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31);
1235     @is_tiny_prime = ();
1236     for (@primes) { $is_tiny_prime[$_] = 1 }
1237     # or simply  @istiny_prime[@primes] = (1) x @primes;
1238
1239 Now you check whether $is_tiny_prime[$some_number].
1240
1241 If the values in question are integers instead of strings, you can save
1242 quite a lot of space by using bit strings instead:
1243
1244     @articles = ( 1..10, 150..2000, 2017 );
1245     undef $read;
1246     for (@articles) { vec($read,$_,1) = 1 }
1247
1248 Now check whether C<vec($read,$n,1)> is true for some C<$n>.
1249
1250 Please do not use
1251
1252     ($is_there) = grep $_ eq $whatever, @array;
1253
1254 or worse yet
1255
1256     ($is_there) = grep /$whatever/, @array;
1257
1258 These are slow (checks every element even if the first matches),
1259 inefficient (same reason), and potentially buggy (what if there are
1260 regex characters in $whatever?).  If you're only testing once, then
1261 use:
1262
1263     $is_there = 0;
1264     foreach $elt (@array) {
1265         if ($elt eq $elt_to_find) {
1266             $is_there = 1;
1267             last;
1268         }
1269     }
1270     if ($is_there) { ... }
1271
1272 =head2 How do I compute the difference of two arrays?  How do I compute the intersection of two arrays?
1273
1274 Use a hash.  Here's code to do both and more.  It assumes that
1275 each element is unique in a given array:
1276
1277     @union = @intersection = @difference = ();
1278     %count = ();
1279     foreach $element (@array1, @array2) { $count{$element}++ }
1280     foreach $element (keys %count) {
1281         push @union, $element;
1282         push @{ $count{$element} > 1 ? \@intersection : \@difference }, $element;
1283     }
1284
1285 Note that this is the I<symmetric difference>, that is, all elements in
1286 either A or in B but not in both.  Think of it as an xor operation.
1287
1288 =head2 How do I test whether two arrays or hashes are equal?
1289
1290 The following code works for single-level arrays.  It uses a stringwise
1291 comparison, and does not distinguish defined versus undefined empty
1292 strings.  Modify if you have other needs.
1293
1294     $are_equal = compare_arrays(\@frogs, \@toads);
1295
1296     sub compare_arrays {
1297         my ($first, $second) = @_;
1298         no warnings;  # silence spurious -w undef complaints
1299         return 0 unless @$first == @$second;
1300         for (my $i = 0; $i < @$first; $i++) {
1301             return 0 if $first->[$i] ne $second->[$i];
1302         }
1303         return 1;
1304     }
1305
1306 For multilevel structures, you may wish to use an approach more
1307 like this one.  It uses the CPAN module FreezeThaw:
1308
1309     use FreezeThaw qw(cmpStr);
1310     @a = @b = ( "this", "that", [ "more", "stuff" ] );
1311
1312     printf "a and b contain %s arrays\n",
1313         cmpStr(\@a, \@b) == 0
1314             ? "the same"
1315             : "different";
1316
1317 This approach also works for comparing hashes.  Here
1318 we'll demonstrate two different answers:
1319
1320     use FreezeThaw qw(cmpStr cmpStrHard);
1321
1322     %a = %b = ( "this" => "that", "extra" => [ "more", "stuff" ] );
1323     $a{EXTRA} = \%b;
1324     $b{EXTRA} = \%a;
1325
1326     printf "a and b contain %s hashes\n",
1327         cmpStr(\%a, \%b) == 0 ? "the same" : "different";
1328
1329     printf "a and b contain %s hashes\n",
1330         cmpStrHard(\%a, \%b) == 0 ? "the same" : "different";
1331
1332
1333 The first reports that both those the hashes contain the same data,
1334 while the second reports that they do not.  Which you prefer is left as
1335 an exercise to the reader.
1336
1337 =head2 How do I find the first array element for which a condition is true?
1338
1339 To find the first array element which satisfies a condition, you can
1340 use the first() function in the List::Util module, which comes with
1341 Perl 5.8.  This example finds the first element that contains "Perl".
1342
1343         use List::Util qw(first);
1344
1345         my $element = first { /Perl/ } @array;
1346
1347 If you cannot use List::Util, you can make your own loop to do the
1348 same thing.  Once you find the element, you stop the loop with last.
1349
1350         my $found;
1351         foreach ( @array )
1352                 {
1353                 if( /Perl/ ) { $found = $_; last }
1354                 }
1355
1356 If you want the array index, you can iterate through the indices
1357 and check the array element at each index until you find one
1358 that satisfies the condition.
1359
1360         my( $found, $index ) = ( undef, -1 );
1361         for( $i = 0; $i < @array; $i++ )
1362                 {
1363                 if( $array[$i] =~ /Perl/ )
1364                         {
1365                         $found = $array[$i];
1366                         $index = $i;
1367                         last;
1368                         }
1369                 }
1370
1371 =head2 How do I handle linked lists?
1372
1373 In general, you usually don't need a linked list in Perl, since with
1374 regular arrays, you can push and pop or shift and unshift at either end,
1375 or you can use splice to add and/or remove arbitrary number of elements at
1376 arbitrary points.  Both pop and shift are both O(1) operations on Perl's
1377 dynamic arrays.  In the absence of shifts and pops, push in general
1378 needs to reallocate on the order every log(N) times, and unshift will
1379 need to copy pointers each time.
1380
1381 If you really, really wanted, you could use structures as described in
1382 L<perldsc> or L<perltoot> and do just what the algorithm book tells you
1383 to do.  For example, imagine a list node like this:
1384
1385     $node = {
1386         VALUE => 42,
1387         LINK  => undef,
1388     };
1389
1390 You could walk the list this way:
1391
1392     print "List: ";
1393     for ($node = $head;  $node; $node = $node->{LINK}) {
1394         print $node->{VALUE}, " ";
1395     }
1396     print "\n";
1397
1398 You could add to the list this way:
1399
1400     my ($head, $tail);
1401     $tail = append($head, 1);       # grow a new head
1402     for $value ( 2 .. 10 ) {
1403         $tail = append($tail, $value);
1404     }
1405
1406     sub append {
1407         my($list, $value) = @_;
1408         my $node = { VALUE => $value };
1409         if ($list) {
1410             $node->{LINK} = $list->{LINK};
1411             $list->{LINK} = $node;
1412         } else {
1413             $_[0] = $node;      # replace caller's version
1414         }
1415         return $node;
1416     }
1417
1418 But again, Perl's built-in are virtually always good enough.
1419
1420 =head2 How do I handle circular lists?
1421
1422 Circular lists could be handled in the traditional fashion with linked
1423 lists, or you could just do something like this with an array:
1424
1425     unshift(@array, pop(@array));  # the last shall be first
1426     push(@array, shift(@array));   # and vice versa
1427
1428 =head2 How do I shuffle an array randomly?
1429
1430 If you either have Perl 5.8.0 or later installed, or if you have
1431 Scalar-List-Utils 1.03 or later installed, you can say:
1432
1433     use List::Util 'shuffle';
1434
1435         @shuffled = shuffle(@list);
1436
1437 If not, you can use a Fisher-Yates shuffle.
1438
1439     sub fisher_yates_shuffle {
1440         my $deck = shift;  # $deck is a reference to an array
1441         my $i = @$deck;
1442         while (--$i) {
1443             my $j = int rand ($i+1);
1444             @$deck[$i,$j] = @$deck[$j,$i];
1445         }
1446     }
1447
1448     # shuffle my mpeg collection
1449     #
1450     my @mpeg = <audio/*/*.mp3>;
1451     fisher_yates_shuffle( \@mpeg );    # randomize @mpeg in place
1452     print @mpeg;
1453
1454 Note that the above implementation shuffles an array in place,
1455 unlike the List::Util::shuffle() which takes a list and returns
1456 a new shuffled list.
1457
1458 You've probably seen shuffling algorithms that work using splice,
1459 randomly picking another element to swap the current element with
1460
1461     srand;
1462     @new = ();
1463     @old = 1 .. 10;  # just a demo
1464     while (@old) {
1465         push(@new, splice(@old, rand @old, 1));
1466     }
1467
1468 This is bad because splice is already O(N), and since you do it N times,
1469 you just invented a quadratic algorithm; that is, O(N**2).  This does
1470 not scale, although Perl is so efficient that you probably won't notice
1471 this until you have rather largish arrays.
1472
1473 =head2 How do I process/modify each element of an array?
1474
1475 Use C<for>/C<foreach>:
1476
1477     for (@lines) {
1478                 s/foo/bar/;     # change that word
1479                 tr/XZ/ZX/;      # swap those letters
1480     }
1481
1482 Here's another; let's compute spherical volumes:
1483
1484     for (@volumes = @radii) {   # @volumes has changed parts
1485                 $_ **= 3;
1486                 $_ *= (4/3) * 3.14159;  # this will be constant folded
1487     }
1488
1489 which can also be done with map() which is made to transform
1490 one list into another:
1491
1492         @volumes = map {$_ ** 3 * (4/3) * 3.14159} @radii;
1493
1494 If you want to do the same thing to modify the values of the
1495 hash, you can use the C<values> function.  As of Perl 5.6
1496 the values are not copied, so if you modify $orbit (in this
1497 case), you modify the value.
1498
1499     for $orbit ( values %orbits ) {
1500                 ($orbit **= 3) *= (4/3) * 3.14159;
1501     }
1502
1503 Prior to perl 5.6 C<values> returned copies of the values,
1504 so older perl code often contains constructions such as
1505 C<@orbits{keys %orbits}> instead of C<values %orbits> where
1506 the hash is to be modified.
1507
1508 =head2 How do I select a random element from an array?
1509
1510 Use the rand() function (see L<perlfunc/rand>):
1511
1512     $index   = rand @array;
1513     $element = $array[$index];
1514
1515 Or, simply:
1516     my $element = $array[ rand @array ];
1517
1518 =head2 How do I permute N elements of a list?
1519
1520 Use the List::Permutor module on CPAN.  If the list is
1521 actually an array, try the Algorithm::Permute module (also
1522 on CPAN).  It's written in XS code and is very efficient.
1523
1524         use Algorithm::Permute;
1525         my @array = 'a'..'d';
1526         my $p_iterator = Algorithm::Permute->new ( \@array );
1527         while (my @perm = $p_iterator->next) {
1528            print "next permutation: (@perm)\n";
1529         }
1530
1531 For even faster execution, you could do:
1532
1533    use Algorithm::Permute;
1534    my @array = 'a'..'d';
1535    Algorithm::Permute::permute {
1536       print "next permutation: (@array)\n";
1537    } @array;
1538
1539 Here's a little program that generates all permutations of
1540 all the words on each line of input. The algorithm embodied
1541 in the permute() function is discussed in Volume 4 (still
1542 unpublished) of Knuth's I<The Art of Computer Programming>
1543 and will work on any list:
1544
1545         #!/usr/bin/perl -n
1546         # Fischer-Kause ordered permutation generator
1547
1548         sub permute (&@) {
1549                 my $code = shift;
1550                 my @idx = 0..$#_;
1551                 while ( $code->(@_[@idx]) ) {
1552                         my $p = $#idx;
1553                         --$p while $idx[$p-1] > $idx[$p];
1554                         my $q = $p or return;
1555                         push @idx, reverse splice @idx, $p;
1556                         ++$q while $idx[$p-1] > $idx[$q];
1557                         @idx[$p-1,$q]=@idx[$q,$p-1];
1558                 }
1559         }
1560
1561         permute {print"@_\n"} split;
1562
1563 =head2 How do I sort an array by (anything)?
1564
1565 Supply a comparison function to sort() (described in L<perlfunc/sort>):
1566
1567     @list = sort { $a <=> $b } @list;
1568
1569 The default sort function is cmp, string comparison, which would
1570 sort C<(1, 2, 10)> into C<(1, 10, 2)>.  C<< <=> >>, used above, is
1571 the numerical comparison operator.
1572
1573 If you have a complicated function needed to pull out the part you
1574 want to sort on, then don't do it inside the sort function.  Pull it
1575 out first, because the sort BLOCK can be called many times for the
1576 same element.  Here's an example of how to pull out the first word
1577 after the first number on each item, and then sort those words
1578 case-insensitively.
1579
1580     @idx = ();
1581     for (@data) {
1582         ($item) = /\d+\s*(\S+)/;
1583         push @idx, uc($item);
1584     }
1585     @sorted = @data[ sort { $idx[$a] cmp $idx[$b] } 0 .. $#idx ];
1586
1587 which could also be written this way, using a trick
1588 that's come to be known as the Schwartzian Transform:
1589
1590     @sorted = map  { $_->[0] }
1591               sort { $a->[1] cmp $b->[1] }
1592               map  { [ $_, uc( (/\d+\s*(\S+)/)[0]) ] } @data;
1593
1594 If you need to sort on several fields, the following paradigm is useful.
1595
1596     @sorted = sort { field1($a) <=> field1($b) ||
1597                      field2($a) cmp field2($b) ||
1598                      field3($a) cmp field3($b)
1599                    }     @data;
1600
1601 This can be conveniently combined with precalculation of keys as given
1602 above.
1603
1604 See the F<sort> article in the "Far More Than You Ever Wanted
1605 To Know" collection in http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz for
1606 more about this approach.
1607
1608 See also the question below on sorting hashes.
1609
1610 =head2 How do I manipulate arrays of bits?
1611
1612 Use pack() and unpack(), or else vec() and the bitwise operations.
1613
1614 For example, this sets $vec to have bit N set if $ints[N] was set:
1615
1616     $vec = '';
1617     foreach(@ints) { vec($vec,$_,1) = 1 }
1618
1619 Here's how, given a vector in $vec, you can
1620 get those bits into your @ints array:
1621
1622     sub bitvec_to_list {
1623         my $vec = shift;
1624         my @ints;
1625         # Find null-byte density then select best algorithm
1626         if ($vec =~ tr/\0// / length $vec > 0.95) {
1627             use integer;
1628             my $i;
1629             # This method is faster with mostly null-bytes
1630             while($vec =~ /[^\0]/g ) {
1631                 $i = -9 + 8 * pos $vec;
1632                 push @ints, $i if vec($vec, ++$i, 1);
1633                 push @ints, $i if vec($vec, ++$i, 1);
1634                 push @ints, $i if vec($vec, ++$i, 1);
1635                 push @ints, $i if vec($vec, ++$i, 1);
1636                 push @ints, $i if vec($vec, ++$i, 1);
1637                 push @ints, $i if vec($vec, ++$i, 1);
1638                 push @ints, $i if vec($vec, ++$i, 1);
1639                 push @ints, $i if vec($vec, ++$i, 1);
1640             }
1641         } else {
1642             # This method is a fast general algorithm
1643             use integer;
1644             my $bits = unpack "b*", $vec;
1645             push @ints, 0 if $bits =~ s/^(\d)// && $1;
1646             push @ints, pos $bits while($bits =~ /1/g);
1647         }
1648         return \@ints;
1649     }
1650
1651 This method gets faster the more sparse the bit vector is.
1652 (Courtesy of Tim Bunce and Winfried Koenig.)
1653
1654 You can make the while loop a lot shorter with this suggestion
1655 from Benjamin Goldberg:
1656
1657         while($vec =~ /[^\0]+/g ) {
1658            push @ints, grep vec($vec, $_, 1), $-[0] * 8 .. $+[0] * 8;
1659         }
1660
1661 Or use the CPAN module Bit::Vector:
1662
1663     $vector = Bit::Vector->new($num_of_bits);
1664     $vector->Index_List_Store(@ints);
1665     @ints = $vector->Index_List_Read();
1666
1667 Bit::Vector provides efficient methods for bit vector, sets of small integers
1668 and "big int" math.
1669
1670 Here's a more extensive illustration using vec():
1671
1672     # vec demo
1673     $vector = "\xff\x0f\xef\xfe";
1674     print "Ilya's string \\xff\\x0f\\xef\\xfe represents the number ",
1675         unpack("N", $vector), "\n";
1676     $is_set = vec($vector, 23, 1);
1677     print "Its 23rd bit is ", $is_set ? "set" : "clear", ".\n";
1678     pvec($vector);
1679
1680     set_vec(1,1,1);
1681     set_vec(3,1,1);
1682     set_vec(23,1,1);
1683
1684     set_vec(3,1,3);
1685     set_vec(3,2,3);
1686     set_vec(3,4,3);
1687     set_vec(3,4,7);
1688     set_vec(3,8,3);
1689     set_vec(3,8,7);
1690
1691     set_vec(0,32,17);
1692     set_vec(1,32,17);
1693
1694     sub set_vec {
1695         my ($offset, $width, $value) = @_;
1696         my $vector = '';
1697         vec($vector, $offset, $width) = $value;
1698         print "offset=$offset width=$width value=$value\n";
1699         pvec($vector);
1700     }
1701
1702     sub pvec {
1703         my $vector = shift;
1704         my $bits = unpack("b*", $vector);
1705         my $i = 0;
1706         my $BASE = 8;
1707
1708         print "vector length in bytes: ", length($vector), "\n";
1709         @bytes = unpack("A8" x length($vector), $bits);
1710         print "bits are: @bytes\n\n";
1711     }
1712
1713 =head2 Why does defined() return true on empty arrays and hashes?
1714
1715 The short story is that you should probably only use defined on scalars or
1716 functions, not on aggregates (arrays and hashes).  See L<perlfunc/defined>
1717 in the 5.004 release or later of Perl for more detail.
1718
1719 =head1 Data: Hashes (Associative Arrays)
1720
1721 =head2 How do I process an entire hash?
1722
1723 Use the each() function (see L<perlfunc/each>) if you don't care
1724 whether it's sorted:
1725
1726     while ( ($key, $value) = each %hash) {
1727         print "$key = $value\n";
1728     }
1729
1730 If you want it sorted, you'll have to use foreach() on the result of
1731 sorting the keys as shown in an earlier question.
1732
1733 =head2 What happens if I add or remove keys from a hash while iterating over it?
1734
1735 (contributed by brian d foy)
1736
1737 The easy answer is "Don't do that!"
1738
1739 If you iterate through the hash with each(), you can delete the key
1740 most recently returned without worrying about it.  If you delete or add
1741 other keys, the iterator may skip or double up on them since perl
1742 may rearrange the hash table.  See the
1743 entry for C<each()> in L<perlfunc>.
1744
1745 =head2 How do I look up a hash element by value?
1746
1747 Create a reverse hash:
1748
1749     %by_value = reverse %by_key;
1750     $key = $by_value{$value};
1751
1752 That's not particularly efficient.  It would be more space-efficient
1753 to use:
1754
1755     while (($key, $value) = each %by_key) {
1756         $by_value{$value} = $key;
1757     }
1758
1759 If your hash could have repeated values, the methods above will only find
1760 one of the associated keys.   This may or may not worry you.  If it does
1761 worry you, you can always reverse the hash into a hash of arrays instead:
1762
1763      while (($key, $value) = each %by_key) {
1764          push @{$key_list_by_value{$value}}, $key;
1765      }
1766
1767 =head2 How can I know how many entries are in a hash?
1768
1769 If you mean how many keys, then all you have to do is
1770 use the keys() function in a scalar context:
1771
1772     $num_keys = keys %hash;
1773
1774 The keys() function also resets the iterator, which means that you may
1775 see strange results if you use this between uses of other hash operators
1776 such as each().
1777
1778 =head2 How do I sort a hash (optionally by value instead of key)?
1779
1780 Internally, hashes are stored in a way that prevents you from imposing
1781 an order on key-value pairs.  Instead, you have to sort a list of the
1782 keys or values:
1783
1784     @keys = sort keys %hash;    # sorted by key
1785     @keys = sort {
1786                     $hash{$a} cmp $hash{$b}
1787             } keys %hash;       # and by value
1788
1789 Here we'll do a reverse numeric sort by value, and if two keys are
1790 identical, sort by length of key, or if that fails, by straight ASCII
1791 comparison of the keys (well, possibly modified by your locale--see
1792 L<perllocale>).
1793
1794     @keys = sort {
1795                 $hash{$b} <=> $hash{$a}
1796                           ||
1797                 length($b) <=> length($a)
1798                           ||
1799                       $a cmp $b
1800     } keys %hash;
1801
1802 =head2 How can I always keep my hash sorted?
1803
1804 You can look into using the DB_File module and tie() using the
1805 $DB_BTREE hash bindings as documented in L<DB_File/"In Memory Databases">.
1806 The Tie::IxHash module from CPAN might also be instructive.
1807
1808 =head2 What's the difference between "delete" and "undef" with hashes?
1809
1810 Hashes contain pairs of scalars: the first is the key, the
1811 second is the value.  The key will be coerced to a string,
1812 although the value can be any kind of scalar: string,
1813 number, or reference.  If a key $key is present in
1814 %hash, C<exists($hash{$key})> will return true.  The value
1815 for a given key can be C<undef>, in which case
1816 C<$hash{$key}> will be C<undef> while C<exists $hash{$key}>
1817 will return true.  This corresponds to (C<$key>, C<undef>)
1818 being in the hash.
1819
1820 Pictures help...  here's the %hash table:
1821
1822           keys  values
1823         +------+------+
1824         |  a   |  3   |
1825         |  x   |  7   |
1826         |  d   |  0   |
1827         |  e   |  2   |
1828         +------+------+
1829
1830 And these conditions hold
1831
1832         $hash{'a'}                       is true
1833         $hash{'d'}                       is false
1834         defined $hash{'d'}               is true
1835         defined $hash{'a'}               is true
1836         exists $hash{'a'}                is true (Perl5 only)
1837         grep ($_ eq 'a', keys %hash)     is true
1838
1839 If you now say
1840
1841         undef $hash{'a'}
1842
1843 your table now reads:
1844
1845
1846           keys  values
1847         +------+------+
1848         |  a   | undef|
1849         |  x   |  7   |
1850         |  d   |  0   |
1851         |  e   |  2   |
1852         +------+------+
1853
1854 and these conditions now hold; changes in caps:
1855
1856         $hash{'a'}                       is FALSE
1857         $hash{'d'}                       is false
1858         defined $hash{'d'}               is true
1859         defined $hash{'a'}               is FALSE
1860         exists $hash{'a'}                is true (Perl5 only)
1861         grep ($_ eq 'a', keys %hash)     is true
1862
1863 Notice the last two: you have an undef value, but a defined key!
1864
1865 Now, consider this:
1866
1867         delete $hash{'a'}
1868
1869 your table now reads:
1870
1871           keys  values
1872         +------+------+
1873         |  x   |  7   |
1874         |  d   |  0   |
1875         |  e   |  2   |
1876         +------+------+
1877
1878 and these conditions now hold; changes in caps:
1879
1880         $hash{'a'}                       is false
1881         $hash{'d'}                       is false
1882         defined $hash{'d'}               is true
1883         defined $hash{'a'}               is false
1884         exists $hash{'a'}                is FALSE (Perl5 only)
1885         grep ($_ eq 'a', keys %hash)     is FALSE
1886
1887 See, the whole entry is gone!
1888
1889 =head2 Why don't my tied hashes make the defined/exists distinction?
1890
1891 This depends on the tied hash's implementation of EXISTS().
1892 For example, there isn't the concept of undef with hashes
1893 that are tied to DBM* files. It also means that exists() and
1894 defined() do the same thing with a DBM* file, and what they
1895 end up doing is not what they do with ordinary hashes.
1896
1897 =head2 How do I reset an each() operation part-way through?
1898
1899 Using C<keys %hash> in scalar context returns the number of keys in
1900 the hash I<and> resets the iterator associated with the hash.  You may
1901 need to do this if you use C<last> to exit a loop early so that when you
1902 re-enter it, the hash iterator has been reset.
1903
1904 =head2 How can I get the unique keys from two hashes?
1905
1906 First you extract the keys from the hashes into lists, then solve
1907 the "removing duplicates" problem described above.  For example:
1908
1909     %seen = ();
1910     for $element (keys(%foo), keys(%bar)) {
1911         $seen{$element}++;
1912     }
1913     @uniq = keys %seen;
1914
1915 Or more succinctly:
1916
1917     @uniq = keys %{{%foo,%bar}};
1918
1919 Or if you really want to save space:
1920
1921     %seen = ();
1922     while (defined ($key = each %foo)) {
1923         $seen{$key}++;
1924     }
1925     while (defined ($key = each %bar)) {
1926         $seen{$key}++;
1927     }
1928     @uniq = keys %seen;
1929
1930 =head2 How can I store a multidimensional array in a DBM file?
1931
1932 Either stringify the structure yourself (no fun), or else
1933 get the MLDBM (which uses Data::Dumper) module from CPAN and layer
1934 it on top of either DB_File or GDBM_File.
1935
1936 =head2 How can I make my hash remember the order I put elements into it?
1937
1938 Use the Tie::IxHash from CPAN.
1939
1940     use Tie::IxHash;
1941     tie my %myhash, 'Tie::IxHash';
1942     for (my $i=0; $i<20; $i++) {
1943         $myhash{$i} = 2*$i;
1944     }
1945     my @keys = keys %myhash;
1946     # @keys = (0,1,2,3,...)
1947
1948 =head2 Why does passing a subroutine an undefined element in a hash create it?
1949
1950 If you say something like:
1951
1952     somefunc($hash{"nonesuch key here"});
1953
1954 Then that element "autovivifies"; that is, it springs into existence
1955 whether you store something there or not.  That's because functions
1956 get scalars passed in by reference.  If somefunc() modifies C<$_[0]>,
1957 it has to be ready to write it back into the caller's version.
1958
1959 This has been fixed as of Perl5.004.
1960
1961 Normally, merely accessing a key's value for a nonexistent key does
1962 I<not> cause that key to be forever there.  This is different than
1963 awk's behavior.
1964
1965 =head2 How can I make the Perl equivalent of a C structure/C++ class/hash or array of hashes or arrays?
1966
1967 Usually a hash ref, perhaps like this:
1968
1969     $record = {
1970         NAME   => "Jason",
1971         EMPNO  => 132,
1972         TITLE  => "deputy peon",
1973         AGE    => 23,
1974         SALARY => 37_000,
1975         PALS   => [ "Norbert", "Rhys", "Phineas"],
1976     };
1977
1978 References are documented in L<perlref> and the upcoming L<perlreftut>.
1979 Examples of complex data structures are given in L<perldsc> and
1980 L<perllol>.  Examples of structures and object-oriented classes are
1981 in L<perltoot>.
1982
1983 =head2 How can I use a reference as a hash key?
1984
1985 You can't do this directly, but you could use the standard Tie::RefHash
1986 module distributed with Perl.
1987
1988 =head1 Data: Misc
1989
1990 =head2 How do I handle binary data correctly?
1991
1992 Perl is binary clean, so this shouldn't be a problem.  For example,
1993 this works fine (assuming the files are found):
1994
1995     if (`cat /vmunix` =~ /gzip/) {
1996         print "Your kernel is GNU-zip enabled!\n";
1997     }
1998
1999 On less elegant (read: Byzantine) systems, however, you have
2000 to play tedious games with "text" versus "binary" files.  See
2001 L<perlfunc/"binmode"> or L<perlopentut>.
2002
2003 If you're concerned about 8-bit ASCII data, then see L<perllocale>.
2004
2005 If you want to deal with multibyte characters, however, there are
2006 some gotchas.  See the section on Regular Expressions.
2007
2008 =head2 How do I determine whether a scalar is a number/whole/integer/float?
2009
2010 Assuming that you don't care about IEEE notations like "NaN" or
2011 "Infinity", you probably just want to use a regular expression.
2012
2013    if (/\D/)            { print "has nondigits\n" }
2014    if (/^\d+$/)         { print "is a whole number\n" }
2015    if (/^-?\d+$/)       { print "is an integer\n" }
2016    if (/^[+-]?\d+$/)    { print "is a +/- integer\n" }
2017    if (/^-?\d+\.?\d*$/) { print "is a real number\n" }
2018    if (/^-?(?:\d+(?:\.\d*)?|\.\d+)$/) { print "is a decimal number\n" }
2019    if (/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/)
2020                         { print "a C float\n" }
2021
2022 There are also some commonly used modules for the task.
2023 L<Scalar::Util> (distributed with 5.8) provides access to perl's
2024 internal function C<looks_like_number> for determining
2025 whether a variable looks like a number.  L<Data::Types>
2026 exports functions that validate data types using both the
2027 above and other regular expressions. Thirdly, there is
2028 C<Regexp::Common> which has regular expressions to match
2029 various types of numbers. Those three modules are available
2030 from the CPAN.
2031
2032 If you're on a POSIX system, Perl supports the C<POSIX::strtod>
2033 function.  Its semantics are somewhat cumbersome, so here's a C<getnum>
2034 wrapper function for more convenient access.  This function takes
2035 a string and returns the number it found, or C<undef> for input that
2036 isn't a C float.  The C<is_numeric> function is a front end to C<getnum>
2037 if you just want to say, "Is this a float?"
2038
2039     sub getnum {
2040         use POSIX qw(strtod);
2041         my $str = shift;
2042         $str =~ s/^\s+//;
2043         $str =~ s/\s+$//;
2044         $! = 0;
2045         my($num, $unparsed) = strtod($str);
2046         if (($str eq '') || ($unparsed != 0) || $!) {
2047             return undef;
2048         } else {
2049             return $num;
2050         }
2051     }
2052
2053     sub is_numeric { defined getnum($_[0]) }
2054
2055 Or you could check out the L<String::Scanf> module on the CPAN
2056 instead. The POSIX module (part of the standard Perl distribution) provides
2057 the C<strtod> and C<strtol> for converting strings to double and longs,
2058 respectively.
2059
2060 =head2 How do I keep persistent data across program calls?
2061
2062 For some specific applications, you can use one of the DBM modules.
2063 See L<AnyDBM_File>.  More generically, you should consult the FreezeThaw
2064 or Storable modules from CPAN.  Starting from Perl 5.8 Storable is part
2065 of the standard distribution.  Here's one example using Storable's C<store>
2066 and C<retrieve> functions:
2067
2068     use Storable;
2069     store(\%hash, "filename");
2070
2071     # later on...
2072     $href = retrieve("filename");        # by ref
2073     %hash = %{ retrieve("filename") };   # direct to hash
2074
2075 =head2 How do I print out or copy a recursive data structure?
2076
2077 The Data::Dumper module on CPAN (or the 5.005 release of Perl) is great
2078 for printing out data structures.  The Storable module on CPAN (or the
2079 5.8 release of Perl), provides a function called C<dclone> that recursively
2080 copies its argument.
2081
2082     use Storable qw(dclone);
2083     $r2 = dclone($r1);
2084
2085 Where $r1 can be a reference to any kind of data structure you'd like.
2086 It will be deeply copied.  Because C<dclone> takes and returns references,
2087 you'd have to add extra punctuation if you had a hash of arrays that
2088 you wanted to copy.
2089
2090     %newhash = %{ dclone(\%oldhash) };
2091
2092 =head2 How do I define methods for every class/object?
2093
2094 Use the UNIVERSAL class (see L<UNIVERSAL>).
2095
2096 =head2 How do I verify a credit card checksum?
2097
2098 Get the Business::CreditCard module from CPAN.
2099
2100 =head2 How do I pack arrays of doubles or floats for XS code?
2101
2102 The kgbpack.c code in the PGPLOT module on CPAN does just this.
2103 If you're doing a lot of float or double processing, consider using
2104 the PDL module from CPAN instead--it makes number-crunching easy.
2105
2106 =head1 AUTHOR AND COPYRIGHT
2107
2108 Copyright (c) 1997-2005 Tom Christiansen, Nathan Torkington, and
2109 other authors as noted. All rights reserved.
2110
2111 This documentation is free; you can redistribute it and/or modify it
2112 under the same terms as Perl itself.
2113
2114 Irrespective of its distribution, all code examples in this file
2115 are hereby placed into the public domain.  You are permitted and
2116 encouraged to use this code in your own programs for fun
2117 or for profit as you see fit.  A simple comment in the code giving
2118 credit would be courteous but is not required.