develooper Front page | perl.perl5.porters | Postings from July 2012

[perl #114022] Pod-Html output differs between explicit outfile and redirection from STDOUT

Thread Previous | Thread Next
James E Keenan
July 6, 2012 17:41
[perl #114022] Pod-Html output differs between explicit outfile and redirection from STDOUT
Message ID:
# New Ticket Created by  James E Keenan 
# Please include the string:  [perl #114022]
# in the subject line of all future correspondence about this issue. 
# <URL: >

This is a bug report for perl from,
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>
         --podpath=<name>:...:<name> --podroot=<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, '', 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.

'' 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 --control=0
#   0:  --outfile is explicitly set to a file called '.t/feature.html'

perl -Ilib --control=1 1> t/1feature.html
#   1:  --outfile is set to '-'; STDOUT is redirected to 't/1feature.html'

perl -Ilib --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 
(  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 
testable (

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/  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
     useithreads=undef, usemultiplicity=undef
     useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
     use64bitint=undef, use64bitall=undef, uselongdouble=undef
     usemymalloc=n, bincompat5005=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 
-I/usr/local/include -I/opt/local/include'
     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', 
     alignbytes=8, prototype=define
   Linker and Libraries:
     ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' 
-L/usr/local/lib -L/opt/local/lib'
     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
   Dynamic Linking:
     dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
     cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup 
-L/usr/local/lib -L/opt/local/lib'

Locally applied patches:

@INC for perl 5.16.0:

Environment for perl 5.16.0:
     LANG (unset)
     LANGUAGE (unset)
     LD_LIBRARY_PATH (unset)
     LOGDIR (unset)
     PERL_BADLANG (unset)

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About