Bug 819042
| Summary: | Trying to use the Pod::Man "parse_file" function in Perl results in errors | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 6 | Reporter: | Paul Smith <pds> | ||||||||
| Component: | perl | Assignee: | Petr Pisar <ppisar> | ||||||||
| Status: | CLOSED ERRATA | QA Contact: | Martin Kyral <mkyral> | ||||||||
| Severity: | medium | Docs Contact: | Martin Kyral <mkyral> | ||||||||
| Priority: | medium | ||||||||||
| Version: | 6.2 | CC: | lnovich, mkyral, ppisar, psabata | ||||||||
| Target Milestone: | rc | Keywords: | Patch | ||||||||
| Target Release: | --- | ||||||||||
| Hardware: | All | ||||||||||
| OS: | Linux | ||||||||||
| Whiteboard: | |||||||||||
| Fixed In Version: | perl-5.10.1-133.el6 | Doc Type: | Bug Fix | ||||||||
| Doc Text: |
Cause:
Using Pod::Man's method parse_file() without setting
output handle explicitly.
Consequence:
The method call fails on type error instead of printing
POD documentation formatted by roff to standard output.
Fix:
Pod::Man and Pod::Text parse_file() methods have been
overloaded to use standard output handle by default.
Result:
Pod::Man and Pod::Text parse_file() method can be used
even without setting output handle explicitly.
|
Story Points: | --- | ||||||||
| Clone Of: | |||||||||||
| : | 826872 (view as bug list) | Environment: | |||||||||
| Last Closed: | 2013-11-21 04:40:27 UTC | Type: | Bug | ||||||||
| Regression: | --- | Mount Type: | --- | ||||||||
| Documentation: | --- | CRM: | |||||||||
| Verified Versions: | Category: | --- | |||||||||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||||||
| Embargoed: | |||||||||||
| Bug Depends On: | |||||||||||
| Bug Blocks: | 947775 | ||||||||||
| Attachments: |
|
||||||||||
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 |
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.