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