This module is pretty much copied from a roguelike that I started writing.

example 1:

use Games::Roguelike::Caves;
my $map = generate_cave(50,20);
for (@$map){
   for (@$_){
       print;
   }
   print "\n"
}
OUTPUT:

            ........                     ......
           ..........         ......    ........
       ...............       ........  .........
      .................      ...................
      .................      ..................
       ................     ...................
  ..    ...............    .....................
 ....    .....  .......    .....................
 ....     ...    ......    .......  ............
 ....     ...    ......    ....      ...........
  ..      ....   .....      ..       ...........
         ......   ....      ..        .........
     ..........   ....     ...        .........
   ............    ..     ....       ..........
  ..............         ......     ......  ..
  ...............        ......    ......
   ...     ......         .....    .....
            ....           ...      ...

example 2:

use Games::Roguelike::Caves;

my $map = generate_cave(50,20);
outline_walls ($map);
for (@$map){
   for (@$_){
       print;
   }
   print "\n"
}

OUTPUT:
                       |-------------|
            |---|     |-.............-|
     |--|  |-...-|    |...............|
   |--..-||-.....|    |...............|     |--|
  |-.....--......|    |-......----....-|   |-..-|
  |.............-|     |-....-|  |-....-| |-....|
  |............-|       |-...-|  |-.....---.....|
  |-...........|        |-....----..............|
   |-..........|    |----.......................|
    |-.........|   |-..........................-|
    |-.........|  |-...........................|
    |.........-|  |............................|
    |........-|   |...........................-|
    |........-|   |.......................----|
    |-........-|  |-.....................-|
     |---......|   |-...................-|
        |-.....|    |...................|
         |....-|    |..................-|
         |-..-|     |-.............----|
          |--|       |-------------|
Ecample 3:
use Games::Roguelike::Caves;
#2 iterations, 50% walls...
my $map = generate_cave(50,20,2,.5,"W",' ');
outline_walls ($map,"W",' ');
for (@$map){
   for (@$_){
       print;
   }
   print "\n"
}
OUTPUT:
W|---|WW|-----|WW|-|WWWWWW|---|W|----|WWWWWW|--|WW
W|   -||-     -||- |WWWW|--   ---    ----|W|-  |WW
W|    --       --  |WWW|-                --|   |WW
W|-       ---    --|WW|-                   |   |WW
WW|-    --|--    |WWWW|    ---                 |WW
W|--   -||-      ||-|W|-  -|W|         |       -|W
W|     -||      -|- ---   |-----     --|        -|
|-      ||       |       --    |--     |         |
|       --                     -||---            |
|    --                         --|W|            |
|   -||-     ----                 ||-       |    |
|  -|WW|    -|WW|                 --       -|-   |
|------|  --||-----       -----            |W|-  |
W|     |--|W|-    |       -|WW|-----       -||-  |
W|-    |W|--|              -|WWW|--|----    ||   |
W|     ||-  --        --    |WW|-  -|WW|-- -||   |
W|--- -|-             ||   -|WW|    |WWWW|-|W|  -|
WWWW|-||      | | |   ||   |WWW|-   |WWWWWWWW|--|W
WWWWWWW|-     |-|-|---|| --|WWWW|-  |WWWWWWWWWWWWW
WWWWWWWW|-----|WWWWWWWW|-|WWWWWWW|--|WWWWWWWWWWWWW