Remove switch from perltodo
[p5sagit/p5-mst-13.2.git] / pod / perlfaq4.pod
1 =head1 NAME
2
3 perlfaq4 - Data Manipulation ($Revision: 1.71 $, $Date: 2005/11/23 07:46:45 $)
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 (portions of this answer contributed by Anno Siegel)
1216
1217 Hearing the word "in" is an I<in>dication that you probably should have
1218 used a hash, not a list or array, to store your data.  Hashes are
1219 designed to answer this question quickly and efficiently.  Arrays aren't.
1220
1221 That being said, there are several ways to approach this.  If you
1222 are going to make this query many times over arbitrary string values,
1223 the fastest way is probably to invert the original array and maintain a
1224 hash whose keys are the first array's values.
1225
1226     @blues = qw/azure cerulean teal turquoise lapis-lazuli/;
1227     %is_blue = ();
1228     for (@blues) { $is_blue{$_} = 1 }
1229
1230 Now you can check whether $is_blue{$some_color}.  It might have been a
1231 good idea to keep the blues all in a hash in the first place.
1232
1233 If the values are all small integers, you could use a simple indexed
1234 array.  This kind of an array will take up less space:
1235
1236     @primes = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31);
1237     @is_tiny_prime = ();
1238     for (@primes) { $is_tiny_prime[$_] = 1 }
1239     # or simply  @istiny_prime[@primes] = (1) x @primes;
1240
1241 Now you check whether $is_tiny_prime[$some_number].
1242
1243 If the values in question are integers instead of strings, you can save
1244 quite a lot of space by using bit strings instead:
1245
1246     @articles = ( 1..10, 150..2000, 2017 );
1247     undef $read;
1248     for (@articles) { vec($read,$_,1) = 1 }
1249
1250 Now check whether C<vec($read,$n,1)> is true for some C<$n>.
1251
1252 These methods guarantee fast individual tests but require a re-organization
1253 of the original list or array.  They only pay off if you have to test
1254 multiple values against the same array.
1255
1256 If you are testing only once, the standard module List::Util exports
1257 the function C<first> for this purpose.  It works by stopping once it
1258 finds the element. It's written in C for speed, and its Perl equivalant
1259 looks like this subroutine:
1260
1261         sub first (&@) {
1262                 my $code = shift;
1263                 foreach (@_) {
1264                         return $_ if &{$code}();
1265                 }
1266                 undef;
1267         }
1268
1269 If speed is of little concern, the common idiom uses grep in scalar context
1270 (which returns the number of items that passed its condition) to traverse the
1271 entire list. This does have the benefit of telling you how many matches it
1272 found, though.
1273
1274         my $is_there = grep $_ eq $whatever, @array;
1275
1276 If you want to actually extract the matching elements, simply use grep in
1277 list context.
1278
1279         my @matches = grep $_ eq $whatever, @array;
1280         
1281 =head2 How do I compute the difference of two arrays?  How do I compute the intersection of two arrays?
1282
1283 Use a hash.  Here's code to do both and more.  It assumes that
1284 each element is unique in a given array:
1285
1286     @union = @intersection = @difference = ();
1287     %count = ();
1288     foreach $element (@array1, @array2) { $count{$element}++ }
1289     foreach $element (keys %count) {
1290         push @union, $element;
1291         push @{ $count{$element} > 1 ? \@intersection : \@difference }, $element;
1292     }
1293
1294 Note that this is the I<symmetric difference>, that is, all elements in
1295 either A or in B but not in both.  Think of it as an xor operation.
1296
1297 =head2 How do I test whether two arrays or hashes are equal?
1298
1299 The following code works for single-level arrays.  It uses a stringwise
1300 comparison, and does not distinguish defined versus undefined empty
1301 strings.  Modify if you have other needs.
1302
1303     $are_equal = compare_arrays(\@frogs, \@toads);
1304
1305     sub compare_arrays {
1306         my ($first, $second) = @_;
1307         no warnings;  # silence spurious -w undef complaints
1308         return 0 unless @$first == @$second;
1309         for (my $i = 0; $i < @$first; $i++) {
1310             return 0 if $first->[$i] ne $second->[$i];
1311         }
1312         return 1;
1313     }
1314
1315 For multilevel structures, you may wish to use an approach more
1316 like this one.  It uses the CPAN module FreezeThaw:
1317
1318     use FreezeThaw qw(cmpStr);
1319     @a = @b = ( "this", "that", [ "more", "stuff" ] );
1320
1321     printf "a and b contain %s arrays\n",
1322         cmpStr(\@a, \@b) == 0
1323             ? "the same"
1324             : "different";
1325
1326 This approach also works for comparing hashes.  Here
1327 we'll demonstrate two different answers:
1328
1329     use FreezeThaw qw(cmpStr cmpStrHard);
1330
1331     %a = %b = ( "this" => "that", "extra" => [ "more", "stuff" ] );
1332     $a{EXTRA} = \%b;
1333     $b{EXTRA} = \%a;
1334
1335     printf "a and b contain %s hashes\n",
1336         cmpStr(\%a, \%b) == 0 ? "the same" : "different";
1337
1338     printf "a and b contain %s hashes\n",
1339         cmpStrHard(\%a, \%b) == 0 ? "the same" : "different";
1340
1341
1342 The first reports that both those the hashes contain the same data,
1343 while the second reports that they do not.  Which you prefer is left as
1344 an exercise to the reader.
1345
1346 =head2 How do I find the first array element for which a condition is true?
1347
1348 To find the first array element which satisfies a condition, you can
1349 use the first() function in the List::Util module, which comes with
1350 Perl 5.8.  This example finds the first element that contains "Perl".
1351
1352         use List::Util qw(first);
1353
1354         my $element = first { /Perl/ } @array;
1355
1356 If you cannot use List::Util, you can make your own loop to do the
1357 same thing.  Once you find the element, you stop the loop with last.
1358
1359         my $found;
1360         foreach ( @array )
1361                 {
1362                 if( /Perl/ ) { $found = $_; last }
1363                 }
1364
1365 If you want the array index, you can iterate through the indices
1366 and check the array element at each index until you find one
1367 that satisfies the condition.
1368
1369         my( $found, $index ) = ( undef, -1 );
1370         for( $i = 0; $i < @array; $i++ )
1371                 {
1372                 if( $array[$i] =~ /Perl/ )
1373                         {
1374                         $found = $array[$i];
1375                         $index = $i;
1376                         last;
1377                         }
1378                 }
1379
1380 =head2 How do I handle linked lists?
1381
1382 In general, you usually don't need a linked list in Perl, since with
1383 regular arrays, you can push and pop or shift and unshift at either end,
1384 or you can use splice to add and/or remove arbitrary number of elements at
1385 arbitrary points.  Both pop and shift are both O(1) operations on Perl's
1386 dynamic arrays.  In the absence of shifts and pops, push in general
1387 needs to reallocate on the order every log(N) times, and unshift will
1388 need to copy pointers each time.
1389
1390 If you really, really wanted, you could use structures as described in
1391 L<perldsc> or L<perltoot> and do just what the algorithm book tells you
1392 to do.  For example, imagine a list node like this:
1393
1394     $node = {
1395         VALUE => 42,
1396         LINK  => undef,
1397     };
1398
1399 You could walk the list this way:
1400
1401     print "List: ";
1402     for ($node = $head;  $node; $node = $node->{LINK}) {
1403         print $node->{VALUE}, " ";
1404     }
1405     print "\n";
1406
1407 You could add to the list this way:
1408
1409     my ($head, $tail);
1410     $tail = append($head, 1);       # grow a new head
1411     for $value ( 2 .. 10 ) {
1412         $tail = append($tail, $value);
1413     }
1414
1415     sub append {
1416         my($list, $value) = @_;
1417         my $node = { VALUE => $value };
1418         if ($list) {
1419             $node->{LINK} = $list->{LINK};
1420             $list->{LINK} = $node;
1421         } else {
1422             $_[0] = $node;      # replace caller's version
1423         }
1424         return $node;
1425     }
1426
1427 But again, Perl's built-in are virtually always good enough.
1428
1429 =head2 How do I handle circular lists?
1430
1431 Circular lists could be handled in the traditional fashion with linked
1432 lists, or you could just do something like this with an array:
1433
1434     unshift(@array, pop(@array));  # the last shall be first
1435     push(@array, shift(@array));   # and vice versa
1436
1437 =head2 How do I shuffle an array randomly?
1438
1439 If you either have Perl 5.8.0 or later installed, or if you have
1440 Scalar-List-Utils 1.03 or later installed, you can say:
1441
1442     use List::Util 'shuffle';
1443
1444         @shuffled = shuffle(@list);
1445
1446 If not, you can use a Fisher-Yates shuffle.
1447
1448     sub fisher_yates_shuffle {
1449         my $deck = shift;  # $deck is a reference to an array
1450         my $i = @$deck;
1451         while (--$i) {
1452             my $j = int rand ($i+1);
1453             @$deck[$i,$j] = @$deck[$j,$i];
1454         }
1455     }
1456
1457     # shuffle my mpeg collection
1458     #
1459     my @mpeg = <audio/*/*.mp3>;
1460     fisher_yates_shuffle( \@mpeg );    # randomize @mpeg in place
1461     print @mpeg;
1462
1463 Note that the above implementation shuffles an array in place,
1464 unlike the List::Util::shuffle() which takes a list and returns
1465 a new shuffled list.
1466
1467 You've probably seen shuffling algorithms that work using splice,
1468 randomly picking another element to swap the current element with
1469
1470     srand;
1471     @new = ();
1472     @old = 1 .. 10;  # just a demo
1473     while (@old) {
1474         push(@new, splice(@old, rand @old, 1));
1475     }
1476
1477 This is bad because splice is already O(N), and since you do it N times,
1478 you just invented a quadratic algorithm; that is, O(N**2).  This does
1479 not scale, although Perl is so efficient that you probably won't notice
1480 this until you have rather largish arrays.
1481
1482 =head2 How do I process/modify each element of an array?
1483
1484 Use C<for>/C<foreach>:
1485
1486     for (@lines) {
1487                 s/foo/bar/;     # change that word
1488                 tr/XZ/ZX/;      # swap those letters
1489     }
1490
1491 Here's another; let's compute spherical volumes:
1492
1493     for (@volumes = @radii) {   # @volumes has changed parts
1494                 $_ **= 3;
1495                 $_ *= (4/3) * 3.14159;  # this will be constant folded
1496     }
1497
1498 which can also be done with map() which is made to transform
1499 one list into another:
1500
1501         @volumes = map {$_ ** 3 * (4/3) * 3.14159} @radii;
1502
1503 If you want to do the same thing to modify the values of the
1504 hash, you can use the C<values> function.  As of Perl 5.6
1505 the values are not copied, so if you modify $orbit (in this
1506 case), you modify the value.
1507
1508     for $orbit ( values %orbits ) {
1509                 ($orbit **= 3) *= (4/3) * 3.14159;
1510     }
1511
1512 Prior to perl 5.6 C<values> returned copies of the values,
1513 so older perl code often contains constructions such as
1514 C<@orbits{keys %orbits}> instead of C<values %orbits> where
1515 the hash is to be modified.
1516
1517 =head2 How do I select a random element from an array?
1518
1519 Use the rand() function (see L<perlfunc/rand>):
1520
1521     $index   = rand @array;
1522     $element = $array[$index];
1523
1524 Or, simply:
1525     my $element = $array[ rand @array ];
1526
1527 =head2 How do I permute N elements of a list?
1528
1529 Use the List::Permutor module on CPAN.  If the list is
1530 actually an array, try the Algorithm::Permute module (also
1531 on CPAN).  It's written in XS code and is very efficient.
1532
1533         use Algorithm::Permute;
1534         my @array = 'a'..'d';
1535         my $p_iterator = Algorithm::Permute->new ( \@array );
1536         while (my @perm = $p_iterator->next) {
1537            print "next permutation: (@perm)\n";
1538         }
1539
1540 For even faster execution, you could do:
1541
1542    use Algorithm::Permute;
1543    my @array = 'a'..'d';
1544    Algorithm::Permute::permute {
1545       print "next permutation: (@array)\n";
1546    } @array;
1547
1548 Here's a little program that generates all permutations of
1549 all the words on each line of input. The algorithm embodied
1550 in the permute() function is discussed in Volume 4 (still
1551 unpublished) of Knuth's I<The Art of Computer Programming>
1552 and will work on any list:
1553
1554         #!/usr/bin/perl -n
1555         # Fischer-Kause ordered permutation generator
1556
1557         sub permute (&@) {
1558                 my $code = shift;
1559                 my @idx = 0..$#_;
1560                 while ( $code->(@_[@idx]) ) {
1561                         my $p = $#idx;
1562                         --$p while $idx[$p-1] > $idx[$p];
1563                         my $q = $p or return;
1564                         push @idx, reverse splice @idx, $p;
1565                         ++$q while $idx[$p-1] > $idx[$q];
1566                         @idx[$p-1,$q]=@idx[$q,$p-1];
1567                 }
1568         }
1569
1570         permute {print"@_\n"} split;
1571
1572 =head2 How do I sort an array by (anything)?
1573
1574 Supply a comparison function to sort() (described in L<perlfunc/sort>):
1575
1576     @list = sort { $a <=> $b } @list;
1577
1578 The default sort function is cmp, string comparison, which would
1579 sort C<(1, 2, 10)> into C<(1, 10, 2)>.  C<< <=> >>, used above, is
1580 the numerical comparison operator.
1581
1582 If you have a complicated function needed to pull out the part you
1583 want to sort on, then don't do it inside the sort function.  Pull it
1584 out first, because the sort BLOCK can be called many times for the
1585 same element.  Here's an example of how to pull out the first word
1586 after the first number on each item, and then sort those words
1587 case-insensitively.
1588
1589     @idx = ();
1590     for (@data) {
1591         ($item) = /\d+\s*(\S+)/;
1592         push @idx, uc($item);
1593     }
1594     @sorted = @data[ sort { $idx[$a] cmp $idx[$b] } 0 .. $#idx ];
1595
1596 which could also be written this way, using a trick
1597 that's come to be known as the Schwartzian Transform:
1598
1599     @sorted = map  { $_->[0] }
1600               sort { $a->[1] cmp $b->[1] }
1601               map  { [ $_, uc( (/\d+\s*(\S+)/)[0]) ] } @data;
1602
1603 If you need to sort on several fields, the following paradigm is useful.
1604
1605     @sorted = sort { field1($a) <=> field1($b) ||
1606                      field2($a) cmp field2($b) ||
1607                      field3($a) cmp field3($b)
1608                    }     @data;
1609
1610 This can be conveniently combined with precalculation of keys as given
1611 above.
1612
1613 See the F<sort> article in the "Far More Than You Ever Wanted
1614 To Know" collection in http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz for
1615 more about this approach.
1616
1617 See also the question below on sorting hashes.
1618
1619 =head2 How do I manipulate arrays of bits?
1620
1621 Use pack() and unpack(), or else vec() and the bitwise operations.
1622
1623 For example, this sets $vec to have bit N set if $ints[N] was set:
1624
1625     $vec = '';
1626     foreach(@ints) { vec($vec,$_,1) = 1 }
1627
1628 Here's how, given a vector in $vec, you can
1629 get those bits into your @ints array:
1630
1631     sub bitvec_to_list {
1632         my $vec = shift;
1633         my @ints;
1634         # Find null-byte density then select best algorithm
1635         if ($vec =~ tr/\0// / length $vec > 0.95) {
1636             use integer;
1637             my $i;
1638             # This method is faster with mostly null-bytes
1639             while($vec =~ /[^\0]/g ) {
1640                 $i = -9 + 8 * pos $vec;
1641                 push @ints, $i if vec($vec, ++$i, 1);
1642                 push @ints, $i if vec($vec, ++$i, 1);
1643                 push @ints, $i if vec($vec, ++$i, 1);
1644                 push @ints, $i if vec($vec, ++$i, 1);
1645                 push @ints, $i if vec($vec, ++$i, 1);
1646                 push @ints, $i if vec($vec, ++$i, 1);
1647                 push @ints, $i if vec($vec, ++$i, 1);
1648                 push @ints, $i if vec($vec, ++$i, 1);
1649             }
1650         } else {
1651             # This method is a fast general algorithm
1652             use integer;
1653             my $bits = unpack "b*", $vec;
1654             push @ints, 0 if $bits =~ s/^(\d)// && $1;
1655             push @ints, pos $bits while($bits =~ /1/g);
1656         }
1657         return \@ints;
1658     }
1659
1660 This method gets faster the more sparse the bit vector is.
1661 (Courtesy of Tim Bunce and Winfried Koenig.)
1662
1663 You can make the while loop a lot shorter with this suggestion
1664 from Benjamin Goldberg:
1665
1666         while($vec =~ /[^\0]+/g ) {
1667            push @ints, grep vec($vec, $_, 1), $-[0] * 8 .. $+[0] * 8;
1668         }
1669
1670 Or use the CPAN module Bit::Vector:
1671
1672     $vector = Bit::Vector->new($num_of_bits);
1673     $vector->Index_List_Store(@ints);
1674     @ints = $vector->Index_List_Read();
1675
1676 Bit::Vector provides efficient methods for bit vector, sets of small integers
1677 and "big int" math.
1678
1679 Here's a more extensive illustration using vec():
1680
1681     # vec demo
1682     $vector = "\xff\x0f\xef\xfe";
1683     print "Ilya's string \\xff\\x0f\\xef\\xfe represents the number ",
1684         unpack("N", $vector), "\n";
1685     $is_set = vec($vector, 23, 1);
1686     print "Its 23rd bit is ", $is_set ? "set" : "clear", ".\n";
1687     pvec($vector);
1688
1689     set_vec(1,1,1);
1690     set_vec(3,1,1);
1691     set_vec(23,1,1);
1692
1693     set_vec(3,1,3);
1694     set_vec(3,2,3);
1695     set_vec(3,4,3);
1696     set_vec(3,4,7);
1697     set_vec(3,8,3);
1698     set_vec(3,8,7);
1699
1700     set_vec(0,32,17);
1701     set_vec(1,32,17);
1702
1703     sub set_vec {
1704         my ($offset, $width, $value) = @_;
1705         my $vector = '';
1706         vec($vector, $offset, $width) = $value;
1707         print "offset=$offset width=$width value=$value\n";
1708         pvec($vector);
1709     }
1710
1711     sub pvec {
1712         my $vector = shift;
1713         my $bits = unpack("b*", $vector);
1714         my $i = 0;
1715         my $BASE = 8;
1716
1717         print "vector length in bytes: ", length($vector), "\n";
1718         @bytes = unpack("A8" x length($vector), $bits);
1719         print "bits are: @bytes\n\n";
1720     }
1721
1722 =head2 Why does defined() return true on empty arrays and hashes?
1723
1724 The short story is that you should probably only use defined on scalars or
1725 functions, not on aggregates (arrays and hashes).  See L<perlfunc/defined>
1726 in the 5.004 release or later of Perl for more detail.
1727
1728 =head1 Data: Hashes (Associative Arrays)
1729
1730 =head2 How do I process an entire hash?
1731
1732 Use the each() function (see L<perlfunc/each>) if you don't care
1733 whether it's sorted:
1734
1735     while ( ($key, $value) = each %hash) {
1736         print "$key = $value\n";
1737     }
1738
1739 If you want it sorted, you'll have to use foreach() on the result of
1740 sorting the keys as shown in an earlier question.
1741
1742 =head2 What happens if I add or remove keys from a hash while iterating over it?
1743
1744 (contributed by brian d foy)
1745
1746 The easy answer is "Don't do that!"
1747
1748 If you iterate through the hash with each(), you can delete the key
1749 most recently returned without worrying about it.  If you delete or add
1750 other keys, the iterator may skip or double up on them since perl
1751 may rearrange the hash table.  See the
1752 entry for C<each()> in L<perlfunc>.
1753
1754 =head2 How do I look up a hash element by value?
1755
1756 Create a reverse hash:
1757
1758     %by_value = reverse %by_key;
1759     $key = $by_value{$value};
1760
1761 That's not particularly efficient.  It would be more space-efficient
1762 to use:
1763
1764     while (($key, $value) = each %by_key) {
1765         $by_value{$value} = $key;
1766     }
1767
1768 If your hash could have repeated values, the methods above will only find
1769 one of the associated keys.   This may or may not worry you.  If it does
1770 worry you, you can always reverse the hash into a hash of arrays instead:
1771
1772      while (($key, $value) = each %by_key) {
1773          push @{$key_list_by_value{$value}}, $key;
1774      }
1775
1776 =head2 How can I know how many entries are in a hash?
1777
1778 If you mean how many keys, then all you have to do is
1779 use the keys() function in a scalar context:
1780
1781     $num_keys = keys %hash;
1782
1783 The keys() function also resets the iterator, which means that you may
1784 see strange results if you use this between uses of other hash operators
1785 such as each().
1786
1787 =head2 How do I sort a hash (optionally by value instead of key)?
1788
1789 (contributed by brian d foy)
1790
1791 To sort a hash, start with the keys. In this example, we give the list of
1792 keys to the sort function which then compares them ASCIIbetically (which
1793 might be affected by your locale settings). The output list has the keys
1794 in ASCIIbetical order. Once we have the keys, we can go through them to
1795 create a report which lists the keys in ASCIIbetical order.
1796
1797         my @keys = sort { $a cmp $b } keys %hash;
1798         
1799         foreach my $key ( @keys )
1800                 {
1801                 printf "%-20s %6d\n", $key, $hash{$value};
1802                 }
1803
1804 We could get more fancy in the C<sort()> block though. Instead of 
1805 comparing the keys, we can compute a value with them and use that
1806 value as the comparison.  
1807
1808 For instance, to make our report order case-insensitive, we use
1809 the C<\L> sequence in a double-quoted string to make everything 
1810 lowercase. The C<sort()> block then compares the lowercased
1811 values to determine in which order to put the keys.
1812
1813         my @keys = sort { "\L$a" cmp "\L$b" } keys %hash;
1814         
1815 Note: if the computation is expensive or the hash has many elements,
1816 you may want to look at the Schwartzian Transform to cache the 
1817 computation results.
1818
1819 If we want to sort by the hash value instead, we use the hash key
1820 to look it up. We still get out a list of keys, but this time they
1821 are ordered by their value.
1822
1823         my @keys = sort { $hash{$a} <=> $hash{$b} } keys %hash;
1824
1825 From there we can get more complex. If the hash values are the same,
1826 we can provide a secondary sort on the hash key.
1827
1828         my @keys = sort { 
1829                 $hash{$a} <=> $hash{$b} 
1830                         or
1831                 "\L$a" cmp "\L$b"
1832                 } keys %hash;
1833
1834 =head2 How can I always keep my hash sorted?
1835
1836 You can look into using the DB_File module and tie() using the
1837 $DB_BTREE hash bindings as documented in L<DB_File/"In Memory Databases">.
1838 The Tie::IxHash module from CPAN might also be instructive.
1839
1840 =head2 What's the difference between "delete" and "undef" with hashes?
1841
1842 Hashes contain pairs of scalars: the first is the key, the
1843 second is the value.  The key will be coerced to a string,
1844 although the value can be any kind of scalar: string,
1845 number, or reference.  If a key $key is present in
1846 %hash, C<exists($hash{$key})> will return true.  The value
1847 for a given key can be C<undef>, in which case
1848 C<$hash{$key}> will be C<undef> while C<exists $hash{$key}>
1849 will return true.  This corresponds to (C<$key>, C<undef>)
1850 being in the hash.
1851
1852 Pictures help...  here's the %hash table:
1853
1854           keys  values
1855         +------+------+
1856         |  a   |  3   |
1857         |  x   |  7   |
1858         |  d   |  0   |
1859         |  e   |  2   |
1860         +------+------+
1861
1862 And these conditions hold
1863
1864         $hash{'a'}                       is true
1865         $hash{'d'}                       is false
1866         defined $hash{'d'}               is true
1867         defined $hash{'a'}               is true
1868         exists $hash{'a'}                is true (Perl5 only)
1869         grep ($_ eq 'a', keys %hash)     is true
1870
1871 If you now say
1872
1873         undef $hash{'a'}
1874
1875 your table now reads:
1876
1877
1878           keys  values
1879         +------+------+
1880         |  a   | undef|
1881         |  x   |  7   |
1882         |  d   |  0   |
1883         |  e   |  2   |
1884         +------+------+
1885
1886 and these conditions now hold; changes in caps:
1887
1888         $hash{'a'}                       is FALSE
1889         $hash{'d'}                       is false
1890         defined $hash{'d'}               is true
1891         defined $hash{'a'}               is FALSE
1892         exists $hash{'a'}                is true (Perl5 only)
1893         grep ($_ eq 'a', keys %hash)     is true
1894
1895 Notice the last two: you have an undef value, but a defined key!
1896
1897 Now, consider this:
1898
1899         delete $hash{'a'}
1900
1901 your table now reads:
1902
1903           keys  values
1904         +------+------+
1905         |  x   |  7   |
1906         |  d   |  0   |
1907         |  e   |  2   |
1908         +------+------+
1909
1910 and these conditions now hold; changes in caps:
1911
1912         $hash{'a'}                       is false
1913         $hash{'d'}                       is false
1914         defined $hash{'d'}               is true
1915         defined $hash{'a'}               is false
1916         exists $hash{'a'}                is FALSE (Perl5 only)
1917         grep ($_ eq 'a', keys %hash)     is FALSE
1918
1919 See, the whole entry is gone!
1920
1921 =head2 Why don't my tied hashes make the defined/exists distinction?
1922
1923 This depends on the tied hash's implementation of EXISTS().
1924 For example, there isn't the concept of undef with hashes
1925 that are tied to DBM* files. It also means that exists() and
1926 defined() do the same thing with a DBM* file, and what they
1927 end up doing is not what they do with ordinary hashes.
1928
1929 =head2 How do I reset an each() operation part-way through?
1930
1931 Using C<keys %hash> in scalar context returns the number of keys in
1932 the hash I<and> resets the iterator associated with the hash.  You may
1933 need to do this if you use C<last> to exit a loop early so that when you
1934 re-enter it, the hash iterator has been reset.
1935
1936 =head2 How can I get the unique keys from two hashes?
1937
1938 First you extract the keys from the hashes into lists, then solve
1939 the "removing duplicates" problem described above.  For example:
1940
1941     %seen = ();
1942     for $element (keys(%foo), keys(%bar)) {
1943         $seen{$element}++;
1944     }
1945     @uniq = keys %seen;
1946
1947 Or more succinctly:
1948
1949     @uniq = keys %{{%foo,%bar}};
1950
1951 Or if you really want to save space:
1952
1953     %seen = ();
1954     while (defined ($key = each %foo)) {
1955         $seen{$key}++;
1956     }
1957     while (defined ($key = each %bar)) {
1958         $seen{$key}++;
1959     }
1960     @uniq = keys %seen;
1961
1962 =head2 How can I store a multidimensional array in a DBM file?
1963
1964 Either stringify the structure yourself (no fun), or else
1965 get the MLDBM (which uses Data::Dumper) module from CPAN and layer
1966 it on top of either DB_File or GDBM_File.
1967
1968 =head2 How can I make my hash remember the order I put elements into it?
1969
1970 Use the Tie::IxHash from CPAN.
1971
1972     use Tie::IxHash;
1973     tie my %myhash, 'Tie::IxHash';
1974     for (my $i=0; $i<20; $i++) {
1975         $myhash{$i} = 2*$i;
1976     }
1977     my @keys = keys %myhash;
1978     # @keys = (0,1,2,3,...)
1979
1980 =head2 Why does passing a subroutine an undefined element in a hash create it?
1981
1982 If you say something like:
1983
1984     somefunc($hash{"nonesuch key here"});
1985
1986 Then that element "autovivifies"; that is, it springs into existence
1987 whether you store something there or not.  That's because functions
1988 get scalars passed in by reference.  If somefunc() modifies C<$_[0]>,
1989 it has to be ready to write it back into the caller's version.
1990
1991 This has been fixed as of Perl5.004.
1992
1993 Normally, merely accessing a key's value for a nonexistent key does
1994 I<not> cause that key to be forever there.  This is different than
1995 awk's behavior.
1996
1997 =head2 How can I make the Perl equivalent of a C structure/C++ class/hash or array of hashes or arrays?
1998
1999 Usually a hash ref, perhaps like this:
2000
2001     $record = {
2002         NAME   => "Jason",
2003         EMPNO  => 132,
2004         TITLE  => "deputy peon",
2005         AGE    => 23,
2006         SALARY => 37_000,
2007         PALS   => [ "Norbert", "Rhys", "Phineas"],
2008     };
2009
2010 References are documented in L<perlref> and the upcoming L<perlreftut>.
2011 Examples of complex data structures are given in L<perldsc> and
2012 L<perllol>.  Examples of structures and object-oriented classes are
2013 in L<perltoot>.
2014
2015 =head2 How can I use a reference as a hash key?
2016
2017 (contributed by brian d foy)
2018
2019 Hash keys are strings, so you can't really use a reference as the key.
2020 When you try to do that, perl turns the reference into its stringified
2021 form (for instance, C<HASH(0xDEADBEEF)>). From there you can't get back
2022 the reference from the stringified form, at least without doing some
2023 extra work on your own. Also remember that hash keys must be unique, but
2024 two different variables can store the same reference (and those variables
2025 can change later).
2026
2027 The Tie::RefHash module, which is distributed with perl, might be what
2028 you want. It handles that extra work.
2029
2030 =head1 Data: Misc
2031
2032 =head2 How do I handle binary data correctly?
2033
2034 Perl is binary clean, so this shouldn't be a problem.  For example,
2035 this works fine (assuming the files are found):
2036
2037     if (`cat /vmunix` =~ /gzip/) {
2038         print "Your kernel is GNU-zip enabled!\n";
2039     }
2040
2041 On less elegant (read: Byzantine) systems, however, you have
2042 to play tedious games with "text" versus "binary" files.  See
2043 L<perlfunc/"binmode"> or L<perlopentut>.
2044
2045 If you're concerned about 8-bit ASCII data, then see L<perllocale>.
2046
2047 If you want to deal with multibyte characters, however, there are
2048 some gotchas.  See the section on Regular Expressions.
2049
2050 =head2 How do I determine whether a scalar is a number/whole/integer/float?
2051
2052 Assuming that you don't care about IEEE notations like "NaN" or
2053 "Infinity", you probably just want to use a regular expression.
2054
2055    if (/\D/)            { print "has nondigits\n" }
2056    if (/^\d+$/)         { print "is a whole number\n" }
2057    if (/^-?\d+$/)       { print "is an integer\n" }
2058    if (/^[+-]?\d+$/)    { print "is a +/- integer\n" }
2059    if (/^-?\d+\.?\d*$/) { print "is a real number\n" }
2060    if (/^-?(?:\d+(?:\.\d*)?|\.\d+)$/) { print "is a decimal number\n" }
2061    if (/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/)
2062                         { print "a C float\n" }
2063
2064 There are also some commonly used modules for the task.
2065 L<Scalar::Util> (distributed with 5.8) provides access to perl's
2066 internal function C<looks_like_number> for determining
2067 whether a variable looks like a number.  L<Data::Types>
2068 exports functions that validate data types using both the
2069 above and other regular expressions. Thirdly, there is
2070 C<Regexp::Common> which has regular expressions to match
2071 various types of numbers. Those three modules are available
2072 from the CPAN.
2073
2074 If you're on a POSIX system, Perl supports the C<POSIX::strtod>
2075 function.  Its semantics are somewhat cumbersome, so here's a C<getnum>
2076 wrapper function for more convenient access.  This function takes
2077 a string and returns the number it found, or C<undef> for input that
2078 isn't a C float.  The C<is_numeric> function is a front end to C<getnum>
2079 if you just want to say, "Is this a float?"
2080
2081     sub getnum {
2082         use POSIX qw(strtod);
2083         my $str = shift;
2084         $str =~ s/^\s+//;
2085         $str =~ s/\s+$//;
2086         $! = 0;
2087         my($num, $unparsed) = strtod($str);
2088         if (($str eq '') || ($unparsed != 0) || $!) {
2089             return undef;
2090         } else {
2091             return $num;
2092         }
2093     }
2094
2095     sub is_numeric { defined getnum($_[0]) }
2096
2097 Or you could check out the L<String::Scanf> module on the CPAN
2098 instead. The POSIX module (part of the standard Perl distribution) provides
2099 the C<strtod> and C<strtol> for converting strings to double and longs,
2100 respectively.
2101
2102 =head2 How do I keep persistent data across program calls?
2103
2104 For some specific applications, you can use one of the DBM modules.
2105 See L<AnyDBM_File>.  More generically, you should consult the FreezeThaw
2106 or Storable modules from CPAN.  Starting from Perl 5.8 Storable is part
2107 of the standard distribution.  Here's one example using Storable's C<store>
2108 and C<retrieve> functions:
2109
2110     use Storable;
2111     store(\%hash, "filename");
2112
2113     # later on...
2114     $href = retrieve("filename");        # by ref
2115     %hash = %{ retrieve("filename") };   # direct to hash
2116
2117 =head2 How do I print out or copy a recursive data structure?
2118
2119 The Data::Dumper module on CPAN (or the 5.005 release of Perl) is great
2120 for printing out data structures.  The Storable module on CPAN (or the
2121 5.8 release of Perl), provides a function called C<dclone> that recursively
2122 copies its argument.
2123
2124     use Storable qw(dclone);
2125     $r2 = dclone($r1);
2126
2127 Where $r1 can be a reference to any kind of data structure you'd like.
2128 It will be deeply copied.  Because C<dclone> takes and returns references,
2129 you'd have to add extra punctuation if you had a hash of arrays that
2130 you wanted to copy.
2131
2132     %newhash = %{ dclone(\%oldhash) };
2133
2134 =head2 How do I define methods for every class/object?
2135
2136 Use the UNIVERSAL class (see L<UNIVERSAL>).
2137
2138 =head2 How do I verify a credit card checksum?
2139
2140 Get the Business::CreditCard module from CPAN.
2141
2142 =head2 How do I pack arrays of doubles or floats for XS code?
2143
2144 The kgbpack.c code in the PGPLOT module on CPAN does just this.
2145 If you're doing a lot of float or double processing, consider using
2146 the PDL module from CPAN instead--it makes number-crunching easy.
2147
2148 =head1 AUTHOR AND COPYRIGHT
2149
2150 Copyright (c) 1997-2005 Tom Christiansen, Nathan Torkington, and
2151 other authors as noted. All rights reserved.
2152
2153 This documentation is free; you can redistribute it and/or modify it
2154 under the same terms as Perl itself.
2155
2156 Irrespective of its distribution, all code examples in this file
2157 are hereby placed into the public domain.  You are permitted and
2158 encouraged to use this code in your own programs for fun
2159 or for profit as you see fit.  A simple comment in the code giving
2160 credit would be courteous but is not required.