This is not intended as a review for this module, but for Markdown itself, the markup system. It is quite easy to use, requires very little work to add markup to ordinary text, and intuitive: take any plain text message from Usenet, pull it through markdown.pl and the HTML you get is likely pretty close to what you would hope for. It's successful: it is used as the markup system Reddit (reddit.com/) and StackOverflow (stackoverflow.com/).
And this module and script here, is what started it all.
The way the module is implemented does not score highly for style, for me: conversion of input text to HTML is done by repeatedly replacing markup with HTML.
But it works. It's fast enough for most day to day uses: formatting takes just a tiny fraction of a second, for a normal input file. And up to now, I've never seen it go wrong and convert text to something that doesn't make sense. So it is definitely "good enough" technology.
There allegedly are implementations of Markdown (in other languages), that are based on a traditional grammar and its associated parser. I remember claims that it would be up to 2 orders of magnitude faster.
On the other hand, I think of the current implementation as "do what I mean" design. Just like Perl itself. Constructing a grammar for such a markup language is not trivial, and remote from the intuitive ideas how how it should work. Getting intuitive results is very important for markup systems, and I don't think you can guarantee that with a grammar based converter.
These functions are the public interface to this module. Then why on earth do their names all start with an underscore? Underscore means "This function is private, don't touch it. Don't even come near it.". And why are their names in uppercase, that by convention always means either a filehandle or a constant?