Cannot resolve bug #9385 due to a fundamental design decision to read the data file in paragraph mode.

Many internal item targets map to the same link (e.g. =item do =item do {block} wind up with the same name.

Uses global variables, Getopt uses a separate set of variables that are then used to overwrite the global variables.

Line 122:

if( ${$dataref}[$i] =~ /^\s+$/m and $dataref->[$i] !~ /^\s/ ){

Can never be true (and mixed dereferencing styles). Change made following Jeff Pinyan's bug report in 2001, but the generated HTML is correct anyway.

Line 147:

$Backlink = _html_escape($Backlink) if defined $Backlink;

The variable is initialised to an empty string, thus the statement modifier can never be false. Similar cases abound (checking for defined() and then non-empty, non-false, ...)

Line 151:

unless (@ARGV && $ARGV[0])

Cannot process a file named '0'

Line 330:

_process_head( $1, $2, $Doindex && $index )

At this point, the file has already been analysed once. If there were =head directives, then $index will be defined.

Here in the second pass, we encounter a =head directive, and will render it, so logically $index could never be undefined the second time through.

Line 351:

next if @Begin_Stack && $Begin_Stack[-1] eq 'html'

Lots of twisty conditionals, all different

(e.g. $Begin_Stack[-1] ne 'html')

to confuse the unwary throughout the code.

Line 380:

Experimental (undocumented) table recognition heuristics: emitted HTML is not compliant with anything (lacking </tr> and </td>).

Line 481:

$opt_netscape variable is configured. Does nothing, not warned as deprecated.

Line 1110:

return if $Ignore;

Can't reach this, since the sub is never called if $Ignore is active.

Line 1808:

my $uo = URI::file->new($destination_file,$source)->abs;

dumps core, since the abs() method requires a parameter.

Line 1956:

sub fragment_id_obfuscated()

Routine is no longer be called from module, was never documented.

Test suite has make-work code to deal with its EBCDIC-incompatible output.