Red Hat Bugzilla – Bug 819042
Trying to use the Pod::Man "parse_file" function in Perl results in errors
Last modified: 2013-11-20 23:40:27 EST
Description of problem: If I try to use the Pod::Man "parse_file" function, I get failures. Even the simplest invocation, directly from the man page, gives uninitialized value and strict refs errors. Version-Release number of selected component (if applicable): $ rpm -qf /usr/share/perl5/Pod/Man.pm perl-5.10.1-119.el6_1.1.x86_64 The documentation (man Pod::Man) says: SYNOPSIS use Pod::Man; my $parser = Pod::Man->new (release => $VERSION, section => 8); # Read POD from STDIN and write to STDOUT. $parser->parse_file (\*STDIN); ... The standard Pod::Simple method parse_file() takes one argument naming the POD file to read from. By default, the output is sent to "STDOUT", but this can be changed with the output_fd() method. How reproducible: 100% Steps to Reproduce: Run this at a shell prompt: $ perl -e 'use Pod::Man; my $p = Pod::Man->new(); $p->parse_file($ARGV[0]);' /usr/share/perl5/Pod/Man.pm OR: $ perl -e 'use Pod::Man; my $p = Pod::Man->new(); $p->parse_file(\*STDIN);' < /usr/share/perl5/Pod/Man.pm Actual results: $ perl -e 'use Pod::Man; my $p = Pod::Man->new(); $p->parse_file($ARGV[0]);' /usr/share/perl5/Pod/Man.pm Can't use string ("") as a symbol ref while "strict refs" in use at /usr/share/perl5/Pod/Man.pm line 722. Or if you add use strict: $ perl -we 'use strict; use Pod::Man; my $p = Pod::Man->new(); $p->parse_file($ARGV[0]);' /usr/share/perl5/Pod/Man.pm Use of uninitialized value in ref-to-glob cast at /usr/share/perl5/Pod/Man.pm line 722. Can't use string ("") as a symbol ref while "strict refs" in use at /usr/share/perl5/Pod/Man.pm line 722. Expected results: I expect the output to go to STDOUT in nroff format. Additional info: The parse_from_file() method does appear to work correctly.
Created attachment 582550 [details] Reproducer
This seems like a misunderstanding between Pod::Simple and Pod::Man API. (Pod::Man is subclass of Pod::Simple). While Pod::Simple::parse_from_file() sets output to *STDOUT by default, Pod::Simple::parse_file() does not. Some other Pod::* formatters handle the output on their own. I raised an question to Pod::Simple developers. As a workaround, you can set the output manually by calling $p->output_fh(*STDOUT) before parse_file().
Pod::Man developer decided do the fix in podlators-2.4.1 (http://cpansearch.perl.org/src/RRA/podlators-2.4.1/ChangeLog).
Created attachment 612816 [details] Fix from upstream
Created attachment 757553 [details] Reproducer It's better to check Pod::Text too as it suffers from the same problem and it's changed by the patch either.
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. http://rhn.redhat.com/errata/RHBA-2013-1534.html