perlbug-followup at perl
Jul 6, 2012, 5:41 PM
Post #1 of 3
# New Ticket Created by James E Keenan
[perl #114022] Pod-Html output differs between explicit outfile and redirection from STDOUT
# Please include the string: [perl #114022]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=114022 >
This is a bug report for perl from jkeenan [at] cpan,
generated with the help of perlbug 1.39 running under perl 5.16.0.
[Please describe your issue here]
The documentation for the 'pod2html' utility states that it is called:
pod2html --help --htmlroot=<name> --infile=<name> --outfile=<name>
--recurse --norecurse --verbose
--index --noindex --title=<name>
... and goes on to state:
Specify the HTML file to create. Output goes to STDOUT if no
outfile is specified.
The POD for core module Pod::Html (around which pod2html is a simple
wrapper) states much the same with respect to 'outfile'.
I would intuitively expect that if I (1) ran pod2html with '--outfile'
set; (2) then ran it again *without* setting '--outfile' but redirecting
STDOUT to a file; that (3) there would be no difference between the
.html files created by either approach.
Peeking further into the Pod::Html code, I would also intuitively expect
that if I (1) ran pod2html with '--outfile' set to a file; (2) then ran
it again with '--outfile=-' (i.e., STDOUT); that (3) there would also be
no difference between the .html files created by either approach.
Either my expectation is incorrect or there is a bug in Pod::Html.
The program attached, 'feature.pl', is adapted from
'ext/Pod-Html/t/feature.t' in the Perl 5 distribution. 't/feature.t'
reads a .pod file, writes an .html file, creates a second .html file
based on HTML code found in the __DATA__ section of 't/feature.t', then
runs a diff on the two files.
'feature.pl' has been modified to remove the explicit testing features
and to respond differently on the basis of a command-line option
'--control' which may be 0, 1 or 2:
perl -Ilib feature.pl --control=0
# 0: --outfile is explicitly set to a file called '.t/feature.html'
perl -Ilib feature.pl --control=1 1> t/1feature.html
# 1: --outfile is set to '-'; STDOUT is redirected to 't/1feature.html'
perl -Ilib feature.pl --control=2 1> t/2feature.html
# 2: --outfile is not set; STDOUT is redirected to 't/2feature.html'
Here is the diff between the first two .html files:
$ diff ./t/feature.html ./t/1feature.html
< <p>some text and a link <a href="t/crossref.html">crossref</a></p>
> <p>some text and a link <a href="/t/crossref.html">crossref</a></p>
Option '--control=2' produced exactly the same output as '--control=1',
so '2' produces the same diff with respect to '0' as does '1'.
Thus, running pod2hml or Pod::Html does not produce the same .html
output when sent to STDOUT as opposed to being sent to an explicit file.
This contradicts my intuitive expectation and is, I assert, a bug.
I discovered this bug in the course of working on my fork of Pod::Html
(https://github.com/jkeenan/Pod-Html). When I ran coverage analysis, I
began to suspect that the "print directly to STDOUT" option was not
being tested by the current Pod::Html test suite. This was not really
surprising, as I have had difficulty writing tests for this option
notwithstanding a lot of refactoring to make the code more explicitly
My hunch is that this bug lies in either the code or the usage of
subroutine relativize_url() found in the
Pod::Simple::XHTML::LocalPodLinks, itself found in lib/Pod/Html.pm. But
I don't understand the code well enough to pinpoint the problem -- and
I'm not really sure what the correct output should be.
Thoughts? Thank you very much.
[Please do not change anything below this line]
Site configuration information for perl 5.16.0:
Configured by jimk at Sun May 20 20:01:26 EDT 2012.
Summary of my perl5 (revision 5 version 16 subversion 0) configuration:
osname=darwin, osvers=8.11.0, archname=darwin-2level
uname='darwin macintosh-8.local 8.11.0 darwin kernel version
8.11.0: wed oct 10 18:26:00 pdt 2007; root:xnu-792.24.17~1release_ppc
power macintosh powerpc '
hint=recommended, useposix=true, d_sigaction=define
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=undef, use64bitall=undef, uselongdouble=undef
cc='cc', ccflags ='-fno-common -DPERL_DARWIN -fno-strict-aliasing
-pipe -I/usr/local/include -I/opt/local/include',
cppflags='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe
ccversion='', gccversion='4.0.1 (Apple Computer, Inc. build 5250)',
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
Linker and Libraries:
ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags ='
libpth=/usr/local/lib /opt/local/lib /usr/lib
libs=-ldbm -ldl -lm -lc
perllibs=-ldl -lm -lc
libc=, so=dylib, useshrplib=false, libperl=libperl.a
dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup
Locally applied patches:
@INC for perl 5.16.0:
Environment for perl 5.16.0: