1 BerkeleyDB 2 3 Version 0.34 4 5 27th March 2008 6 7 Copyright (c) 1997-2008 Paul Marquess. All rights reserved. This 8 program is free software; you can redistribute it and/or modify 9 it under the same terms as Perl itself. 10 11 12DESCRIPTION 13----------- 14 15BerkeleyDB is a module which allows Perl programs to make use of the 16facilities provided by Berkeley DB version 2 or greater. (Note: if 17you want to use version 1 of Berkeley DB with Perl you need the DB_File 18module). 19 20Berkeley DB is a C library which provides a consistent interface to a 21number of database formats. BerkeleyDB provides an interface to all 22four of the database types (hash, btree, queue and recno) currently 23supported by Berkeley DB. 24 25For further details see the documentation in the file BerkeleyDB.pod. 26 27PREREQUISITES 28------------- 29 30Before you can build BerkeleyDB you need to have the following 31installed on your system: 32 33 * To run the test harness for this module, you must make sure that the 34 directory where you have untarred this module is NOT a network 35 drive, e.g. NFS or AFS. 36 37 * Perl 5.004_04 or greater. 38 39 * Berkeley DB Version 2.6.4 or greater 40 41 The official web site for Berkeley DB is 42 43 http://www.oracle.com/technology/products/berkeley-db/db/index.html 44 45 The latest version of Berkeley DB is always available there. It 46 is recommended that you use the most recent version available. 47 48 The one exception to this advice is where you want to use BerkeleyDB 49 to access database files created by a third-party application, 50 like Sendmail. In these cases you must build BerkeleyDB with a 51 compatible version of Berkeley DB. 52 53 54BUILDING THE MODULE 55------------------- 56 57Assuming you have met all the prerequisites, building the module should 58be relatively straightforward. 59 60Step 1 : If you are running Solaris 2.5, 2.7 or HP-UX 10 read either 61 the Solaris Notes or HP-UX Notes sections below. 62 If you are running Linux please read the Linux Notes section 63 before proceeding. 64 If you are running FreeBSD read the FreeBSD Notes section 65 below. 66 67 68Step 2 : Edit the file config.in to suit you local installation. 69 Instructions are given in the file. 70 71Step 3 : Build and test the module using this sequence of commands: 72 73 perl Makefile.PL 74 make 75 make test 76 77INSTALLATION 78------------ 79 80 make install 81 82TROUBLESHOOTING 83=============== 84 85Here are some of the problems that people encounter when building BerkeleyDB. 86 87Missing db.h or libdb.a 88----------------------- 89 90If you get an error like this: 91 92 cc -c -I./libraries/ -Dbool=char -DHAS_BOOL -I/usr/local/include -O2 93 -DVERSION=\"0.07\" -DXS_VERSION=\"0.07\" -fpic 94 -I/usr/local/lib/perl5/5.00503/i586-linux/CORE BerkeleyDB.c 95 BerkeleyDB.xs:52: db.h: No such file or directory 96 97or this: 98 99 cc -c -I./libraries/2.7.5 -Dbool=char -DHAS_BOOL -I/usr/local/include -O2 100 -DVERSION=\"0.07\" -DXS_VERSION=\"0.07\" -fpic 101 -I/usr/local/lib/perl5/5.00503/i586-linux/CORE BerkeleyDB.c 102 LD_RUN_PATH="/lib" cc -o blib/arch/auto/BerkeleyDB/BerkeleyDB.so -shared 103 -L/usr/local/lib BerkeleyDB.o 104 -L/home/paul/perl/ext/BerkDB/BerkeleyDB/libraries -ldb 105 ld: cannot open -ldb: No such file or directory 106 107This symptom can imply: 108 109 1. You don't have Berkeley DB installed on your system at all. 110 Solution: get & install Berkeley DB. 111 112 2. You do have Berkeley DB installed, but it isn't in a standard place. 113 Solution: Edit config.in and set the LIB and INCLUDE variables to point 114 to the directories where libdb.a and db.h are installed. 115 116#error db.h is not for Berkeley DB at all. 117------------------------------------------ 118 119If you get the error above when building this module it means that there 120is a file called "db.h" on your system that isn't the one that comes 121with Berkeley DB. 122 123Options: 124 125 1. You don't have Berkeley DB installed on your system at all. 126 Solution: get & install Berkeley DB. 127 128 2. Edit config.in and make sure the INCLUDE variable points to the 129 directory where the Berkeley DB file db.h is installed. 130 131 3. If option 2 doesn't work, try tempoarily renaming the db.h file 132 that is causing the error. 133 134#error db.h is for Berkeley DB 1.x - need at least Berkeley DB 2.6.4 135-------------------------------------------------------------------- 136 137The error above will occur if there is a copy of the Berkeley DB 1.x 138file db.h on your system. 139 140This error will happen when 141 142 1. you only have Berkeley DB version 1 on your system. 143 Solution: get & install a newer version of Berkeley DB. 144 145 2. you have both version 1 and a later version of Berkeley DB 146 installed on your system. When building BerkeleyDB it attempts to 147 use the db.h for Berkeley DB version 1. 148 Solution: Edit config.in and set the LIB and INCLUDE variables 149 to point to the directories where libdb.a and db.h are 150 installed. 151 152 153#error db.h is for Berkeley DB 2.0-2.5 - need at least Berkeley DB 2.6.4 154------------------------------------------------------------------------ 155 156The error above will occur if there is a copy of the the file db.h for 157Berkeley DB 2.0 to 2.5 on your system. 158 159This symptom can imply: 160 161 1. You don't have a new enough version of Berkeley DB. 162 Solution: get & install a newer version of Berkeley DB. 163 164 2. You have the correct version of Berkeley DB installed, but it isn't 165 in a standard place. 166 Solution: Edit config.in and set the LIB and INCLUDE variables 167 to point to the directories where libdb.a and db.h are 168 installed. 169 170Undefined Symbol: txn_stat 171-------------------------- 172 173BerkeleyDB seems to have built correctly, but you get an error like this 174when you run the test harness: 175 176 $ make test 177 PERL_DL_NONLAZY=1 /home/paul/perl/install/bin/perl5.00503 178 -Iblib/arch -Iblib/lib -I/usr/local/lib/perl5/5.00503/i586-linux 179 -I/usr/local/lib/perl5/5.00503 -e 'use Test::Harness qw(&runtests $verbose); 180 $verbose=0; runtests @ARGV;' t/*.t 181 t/btree.............Can't load 'blib/arch/auto/BerkeleyDB/BerkeleyDB.so' for 182 module BerkeleyDB: blib/arch/auto/BerkeleyDB/BerkeleyDB.so: 183 undefined symbol: txn_stat 184 at /usr/local/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169. 185 ... 186 187This error usually happens when you have both version 1 and a newer version 188of Berkeley DB installed on your system. BerkeleyDB attempts 189to build using the db.h for Berkeley DB version 2/3/4 and the version 1 190library. Unfortunately the two versions aren't compatible with each 191other. BerkeleyDB can only be built with Berkeley DB version 2, 3 or 4. 192 193Solution: Setting the LIB & INCLUDE variables in config.in to point to the 194 correct directories can sometimes be enough to fix this 195 problem. If that doesn't work the easiest way to fix the 196 problem is to either delete or temporarily rename the copies 197 of db.h and libdb.a that you don't want BerkeleyDB to use. 198 199Undefined Symbol: db_appinit 200---------------------------- 201 202BerkeleyDB seems to have built correctly, but you get an error like this 203when you run the test harness: 204 205 $ make test 206 PERL_DL_NONLAZY=1 /home/paul/perl/install/bin/perl5.00561 -Iblib/arch 207 -Iblib/lib -I/home/paul/perl/install/5.005_61/lib/5.00561/i586-linux 208 -I/home/paul/perl/install/5.005_61/lib/5.00561 -e 'use Test::Harness 209 qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t 210 t/btree.............Can't load 'blib/arch/auto/BerkeleyDB/BerkeleyDB.so' for 211 module BerkeleyDB: blib/arch/auto/BerkeleyDB/BerkeleyDB.so: 212 undefined symbol: db_appinit 213 at /home/paul/perl/install/5.005_61/lib/5.00561/i586-linux/DynaLoader.pm 214 ... 215 216 217This error usually happens when you have both version 2 and version 2183 of Berkeley DB installed on your system and BerkeleyDB attempts 219to build using the db.h for Berkeley DB version 2 and the version 3 220library. Unfortunately the two versions aren't compatible with each 221other. 222 223Solution: Setting the LIB & INCLUDE variables in config.in to point to the 224 correct directories can sometimes be enough to fix this 225 problem. If that doesn't work the easiest way to fix the 226 problem is to either delete or temporarily rename the copies 227 of db.h and libdb.a that you don't want BerkeleyDB to use. 228 229Undefined Symbol: db_create 230--------------------------- 231 232BerkeleyDB seems to have built correctly, but you get an error like this 233when you run the test harness: 234 235 $ make test 236 PERL_DL_NONLAZY=1 /home/paul/perl/install/bin/perl5.00561 -Iblib/arch 237 -Iblib/lib -I/home/paul/perl/install/5.005_61/lib/5.00561/i586-linux 238 -I/home/paul/perl/install/5.005_61/lib/5.00561 -e 'use Test::Harness 239 qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t 240 t/btree.............Can't load 'blib/arch/auto/BerkeleyDB/BerkeleyDB.so' for 241 module BerkeleyDB: blib/arch/auto/BerkeleyDB/BerkeleyDB.so: 242 undefined symbol: db_create 243 at /home/paul/perl/install/5.005_61/lib/5.00561/i586-linux/DynaLoader.pm 244 ... 245 246This error usually happens when you have both version 2 and version 2473 of Berkeley DB installed on your system and BerkeleyDB attempts 248to build using the db.h for Berkeley DB version 3 and the version 2 249library. Unfortunately the two versions aren't compatible with each 250other. 251 252Solution: Setting the LIB & INCLUDE variables in config.in to point to the 253 correct directories can sometimes be enough to fix this 254 problem. If that doesn't work the easiest way to fix the 255 problem is to either delete or temporarily rename the copies 256 of db.h and libdb.a that you don't want BerkeleyDB to use. 257 258 259Incompatible versions of db.h and libdb 260--------------------------------------- 261 262BerkeleyDB seems to have built correctly, but you get an error like this 263when you run the test harness: 264 265 $ make test 266 PERL_DL_NONLAZY=1 /home/paul/perl/install/bin/perl5.00503 267 -Iblib/arch -Iblib/lib -I/usr/local/lib/perl5/5.00503/i586-linux 268 -I/usr/local/lib/perl5/5.00503 -e 'use Test::Harness qw(&runtests $verbose); 269 $verbose=0; runtests @ARGV;' t/*.t 270 t/btree............. 271 BerkeleyDB needs compatible versions of libdb & db.h 272 you have db.h version 2.6.4 and libdb version 2.7.5 273 BEGIN failed--compilation aborted at t/btree.t line 25. 274 dubious 275 Test returned status 255 (wstat 65280, 0xff00) 276 ... 277 278Another variation on the theme of having two versions of Berkeley DB on 279your system. 280 281Solution: Setting the LIB & INCLUDE variables in config.in to point to the 282 correct directories can sometimes be enough to fix this 283 problem. If that doesn't work the easiest way to fix the 284 problem is to either delete or temporarily rename the copies 285 of db.h and libdb.a that you don't want BerkeleyDB to use. 286 If you are running Linux, please read the Linux Notes section below. 287 288 289 290Solaris build fails with "language optional software package not installed" 291--------------------------------------------------------------------------- 292 293If you are trying to build this module under Solaris and you get an 294error message like this 295 296 /usr/ucb/cc: language optional software package not installed 297 298it means that Perl cannot find the C compiler on your system. The cryptic 299message is just Sun's way of telling you that you haven't bought their 300C compiler. 301 302When you build a Perl module that needs a C compiler, the Perl build 303system tries to use the same C compiler that was used to build perl 304itself. In this case your Perl binary was built with a C compiler that 305lived in /usr/ucb. 306 307To continue with building this module, you need to get a C compiler, 308or tell Perl where your C compiler is, if you already have one. 309 310Assuming you have now got a C compiler, what you do next will be dependant 311on what C compiler you have installed. If you have just installed Sun's 312C compiler, you shouldn't have to do anything. Just try rebuilding 313this module. 314 315If you have installed another C compiler, say gcc, you have to tell perl 316how to use it instead of /usr/ucb/cc. 317 318This set of options seems to work if you want to use gcc. Your mileage 319may vary. 320 321 perl Makefile.PL CC=gcc CCCDLFLAGS=-fPIC OPTIMIZE=" " 322 make test 323 324If that doesn't work for you, it's time to make changes to the Makefile 325by hand. Good luck! 326 327 328 329Solaris build fails with "gcc: unrecognized option `-KPIC'" 330----------------------------------------------------------- 331 332You are running Solaris and you get an error like this when you try to 333build this Perl module 334 335 gcc: unrecognized option `-KPIC' 336 337This symptom usually means that you are using a Perl binary that has been 338built with the Sun C compiler, but you are using gcc to build this module. 339 340When Perl builds modules that need a C compiler, it will attempt to use 341the same C compiler and command line options that was used to build perl 342itself. In this case "-KPIC" is a valid option for the Sun C compiler, 343but not for gcc. The equivalent option for gcc is "-fPIC". 344 345The solution is either: 346 347 1. Build both Perl and this module with the same C compiler, either 348 by using the Sun C compiler for both or gcc for both. 349 350 2. Try generating the Makefile for this module like this perl 351 352 perl Makefile.PL CC=gcc CCCDLFLAGS=-fPIC OPTIMIZE=" " LD=gcc 353 make test 354 355 This second option seems to work when mixing a Perl binary built 356 with the Sun C compiler and this module built with gcc. Your 357 mileage may vary. 358 359 360 361Network Drive 362------------- 363 364BerkeleyDB seems to have built correctly, but you get a series of errors 365like this when you run the test harness: 366 367 368t/btree........NOK 178Can't call method "txn_begin" on an undefined value at t/btree.t line 637. 369t/btree........dubious 370 Test returned status 11 (wstat 2816, 0xb00) 371DIED. FAILED tests 28, 178-244 372 Failed 68/244 tests, 72.13% okay 373t/db-3.0.......NOK 2Can't call method "set_mutexlocks" on an undefined value at t/db-3.0.t line 39. 374t/db-3.0.......dubious 375 Test returned status 11 (wstat 2816, 0xb00) 376DIED. FAILED tests 2-14 377 Failed 13/14 tests, 7.14% okay 378t/db-3.1.......ok 379t/db-3.2.......NOK 5Can't call method "set_flags" on an undefined value at t/db-3.2.t line 62. 380t/db-3.2.......dubious 381 Test returned status 11 (wstat 2816, 0xb00) 382DIED. FAILED tests 3, 5-6 383 Failed 3/6 tests, 50.00% okay 384t/db-3.3.......ok 385 386This pattern of errors happens if you have built the module in a directory 387that is network mounted (e.g. NFS ar AFS). 388 389The solution is to use a local drive. Berkeley DB doesn't support 390network drives. 391 392 393Berkeley DB library configured to support only DB_PRIVATE environments 394---------------------------------------------------------------------- 395 396BerkeleyDB seems to have built correctly, but you get a series of errors 397like this when you run the test harness: 398 399 t/btree........ok 27/244 400 # : Berkeley DB library configured to support only DB_PRIVATE environments 401 t/btree........ok 177/244 402 # : Berkeley DB library configured to support only DB_PRIVATE environments 403 t/btree........NOK 178Can't call method "txn_begin" on an undefined value at t/btree.t line 638. 404 t/btree........dubious 405 Test returned status 2 (wstat 512, 0x200) 406 Scalar found where operator expected at (eval 153) line 1, near "'int' $__val" 407 (Missing operator before $__val?) 408 DIED. FAILED tests 28, 178-244 409 Failed 68/244 tests, 72.13% okay 410 411 412Some versions of Redhat Linux, and possibly some other Linux 413distributions, include a seriously restricted build of the 414Berkeley DB library that is incompatible with this module. See 415https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=91933 for an 416exhaustive discussion on the reasons for this. 417 418 419Solution: 420 421You will have to build a private copy of the Berkeley DB library and 422use it when building this Perl module. 423 424 425 426Linux Notes 427----------- 428 429Some versions of Linux (e.g. RedHat 6, SuSe 6) ship with a C library 430that has version 2.x of Berkeley DB linked into it. This makes it 431difficult to build this module with anything other than the version of 432Berkeley DB that shipped with your Linux release. If you do try to use 433a different version of Berkeley DB you will most likely get the error 434described in the "Incompatible versions of db.h and libdb" section of 435this file. 436 437To make matters worse, prior to Perl 5.6.1, the perl binary itself 438*always* included the Berkeley DB library. 439 440If you want to use a newer version of Berkeley DB with this module, the 441easiest solution is to use Perl 5.6.1 (or better) and Berkeley DB 3.x 442(or better). 443 444There are two approaches you can use to get older versions of Perl to 445work with specific versions of Berkeley DB. Both have their advantages 446and disadvantages. 447 448The first approach will only work when you want to build a version of 449Perl older than 5.6.1 along with Berkeley DB 3.x. If you want to use 450Berkeley DB 2.x, you must use the next approach. This approach involves 451rebuilding your existing version of Perl after applying an unofficial 452patch. The "patches" directory in the this module's source distribution 453contains a number of patch files. There is one patch file for every 454stable version of Perl since 5.004. Apply the appropriate patch to your 455Perl source tree before re-building and installing Perl from scratch. 456For example, assuming you are in the top-level source directory for 457Perl 5.6.0, the command below will apply the necessary patch. Remember 458to replace the path shown below with one that points to this module's 459patches directory. 460 461 patch -p1 -N </path/to/BerkeleyDB/patches/5.6.0 462 463Now rebuild & install perl. You should now have a perl binary that can 464be used to build this module. Follow the instructions in "BUILDING THE 465MODULE", remembering to set the INCLUDE and LIB variables in config.in. 466 467 468The second approach will work with Berkeley DB 2.x or better. 469Start by building Berkeley DB as a shared library. This is from 470the Berkeley DB build instructions: 471 472 Building Shared Libraries for the GNU GCC compiler 473 474 If you're using gcc and there's no better shared library example for 475 your architecture, the following shared library build procedure will 476 probably work. 477 478 Add the -fpic option to the CFLAGS value in the Makefile. 479 480 Rebuild all of your .o files. This will create a Berkeley DB library 481 that contains .o files with PIC code. To build the shared library, 482 then take the following steps in the library build directory: 483 484 % mkdir tmp 485 % cd tmp 486 % ar xv ../libdb.a 487 % gcc -shared -o libdb.so *.o 488 % mv libdb.so .. 489 % cd .. 490 % rm -rf tmp 491 492 Note, you may have to change the gcc line depending on the 493 requirements of your system. 494 495 The file libdb.so is your shared library 496 497Once you have built libdb.so, you will need to store it somewhere safe. 498 499 cp libdb.so /usr/local/BerkeleyDB/lib 500 501If you now set the LD_PRELOAD environment variable to point to this 502shared library, Perl will use it instead of the version of Berkeley DB 503that shipped with your Linux distribution. 504 505 export LD_PRELOAD=/usr/local/BerkeleyDB/lib/libdb.so 506 507Finally follow the instructions in "BUILDING THE MODULE" to build, 508test and install this module. Don't forget to set the INCLUDE and LIB 509variables in config.in. 510 511Remember, you will need to have the LD_PRELOAD variable set anytime you 512want to use Perl with Berkeley DB. Also note that if you have LD_PRELOAD 513permanently set it will affect ALL commands you execute. This may be a 514problem if you run any commands that access a database created by the 515version of Berkeley DB that shipped with your Linux distribution. 516 517 518 519Solaris 2.5 Notes 520----------------- 521 522If you are running Solaris 2.5, and you get this error when you run the 523BerkeleyDB test harness: 524 525 libc internal error: _rmutex_unlock: rmutex not held. 526 527you probably need to install a Sun patch. It has been reported that 528Sun patch 103187-25 (or later revisions) fixes this problem. 529 530To find out if you have the patch installed, the command "showrev -p" 531will display the patches that are currently installed on your system. 532 533 534Solaris 2.7 Notes 535----------------- 536 537If you are running Solaris 2.7 and all the tests in the test harness 538generate a core dump, try applying Sun patch 106980-09 (or better). 539 540To find out if you have the patch installed, the command "showrev -p" 541will display the patches that are currently installed on your system. 542 543 544HP-UX Notes 545----------- 546 547Some people running HP-UX 10 have reported getting an error like this 548when building this module with the native HP-UX compiler. 549 550 ld: (Warning) At least one PA 2.0 object file (BerkeleyDB.o) was detected. 551 The linked output may not run on a PA 1.x system. 552 ld: Invalid loader fixup for symbol "$000000A5". 553 554If this is the case for you, Berkeley DB needs to be recompiled with 555the +z or +Z option and the resulting library placed in a .sl file. The 556following steps should do the trick: 557 558 1: Configure the Berkeley DB distribution with the +z or +Z C compiler 559 flag: 560 561 env "CFLAGS=+z" ../dist/configure ... 562 563 2: Edit the Berkeley DB Makefile and change: 564 565 "libdb= libdb.a" to "libdb= libdb.sl". 566 567 3: Build and install the Berkeley DB distribution as usual. 568 569 570FreeBSD Notes 571------------- 572 573On FreeBSD 4.x through 6.x, the default db.h is for version 1. The build 574will fail with an error similar to: 575 576BerkeleyDB.xs:74: #error db.h is from Berkeley DB 1.x - need at least 577Berkeley DB 2.6.4 578 579Later versions of Berkeley DB are usually installed from ports. 580The available versions can be found by running a find(1) command: 581 582 % find /usr/local/include -name 'db.h' 583 /usr/local/include/db3/db.h 584 /usr/local/include/db4/db.h 585 /usr/local/include/db41/db.h 586 /usr/local/include/db42/db.h 587 /usr/local/include/db43/db.h 588 589The desired version of the library must be specified on the command line or 590via the config.in file. Make sure both values point to the same version: 591 592 INCLUDE = /usr/local/include/db43 593 LIB = /usr/local/lib/db43 594 595 596 597 598FEEDBACK 599-------- 600 601General feedback/questions/bug reports can be sent to me at pmqs@cpan.org. 602 603Alternatively, if you have Usenet access, you can try the 604comp.databases.berkeley-db or comp.lang.perl.modules groups. 605 606 607How to report a problem with BerkeleyDB. 608---------------------------------------- 609 610To help me help you, I need of the following information: 611 612 1. The version of Perl and the operating system name and version you 613 are running. The complete output from running "perl -V" will tell 614 me all I need to know. 615 If your perl does not understand the "-V" option is too old. 616 BerkeleyDB needs Perl version 5.004_04 or better. 617 618 2. The version of BerkeleyDB you have. If you have successfully 619 installed BerkeleyDB, this one-liner will tell you: 620 621 perl -MBerkeleyDB -e 'print qq{BerkeleyDB ver $BerkeleyDB::VERSION\n}' 622 623 If you are running windows use this 624 625 perl -MBerkeleyDB -e "print qq{BerkeleyDB ver $BerkeleyDB::VERSION\n}" 626 627 If you haven't installed BerkeleyDB then search BerkeleyDB.pm for a 628 line like this: 629 630 $VERSION = "1.20" ; 631 632 3. The version of Berkeley DB you have installed. If you have 633 successfully installed BerkeleyDB, this one-liner will tell you: 634 635 perl -MBerkeleyDB -e 'print BerkeleyDB::DB_VERSION_STRING.qq{\n}' 636 637 If you are running windows use this 638 639 perl -MBerkeleyDB -e "print BerkeleyDB::DB_VERSION_STRING.qq{\n}" 640 641 If you haven't installed BerkeleyDB then search db.h for a line 642 like this: 643 644 #define DB_VERSION_STRING 645 646 4. If you are having problems building BerkeleyDB, send me a complete 647 log of what happened. 648 649 5. Now the difficult one. If you think you have found a bug in 650 BerkeleyDB and you want me to fix it, you will *greatly* enhance 651 the chances of me being able to track it down by sending me a small 652 self-contained Perl script that illustrates the problem you are 653 encountering. Include a summary of what you think the problem is 654 and a log of what happens when you run the script, in case I can't 655 reproduce your problem on my system. If possible, don't have the 656 script dependent on an existing 20Meg database. If the script you 657 send me can create the database itself then that is preferred. 658 659 I realise that in some cases this is easier said than done, so if 660 you can only reproduce the problem in your existing script, then 661 you can post me that if you want. Just don't expect me to find your 662 problem in a hurry, or at all. :-) 663 664 665CHANGES 666------- 667 668See the Changes file. 669 670Paul Marquess <pmqs@cpan.org> 671 672