Beyoncé! Beyoncé! Beyoncé!!
Beyoncé! Beyoncé! Beyoncé! Beyoncé! Beyoncé! Beyoncé!
Older versions didn't convert Beyoncé in verbatim. EOP
my $expected = <<"EOM"; .SH "ACCENTS" .IX Header "ACCENTS" Beyonce\\*'! Beyonce\\*'! Beyonce\\*'!! .PP .Vb 3 \\& Beyonce\\*'! Beyonce\\*'! \\& Beyonce\\*'! Beyonce\\*'! \\& Beyonce\\*'! Beyonce\\*'! .Ve .PP Older versions didn't convert Beyonce\\*' in verbatim. EOM $parser = Pod::Man->new or die "Cannot create parser\n"; open my $out_fh, ">", 'out.tmp' or die "Can't open \$out_fh: $!"; $parser->output_fh($out_fh); $parser->parse_string_document($pod); close $out_fh; open my $in_fh, "<", 'out.tmp' or die "Can't open \$in_fh: $!"; while (<$in_fh>) { last if /^\.TH/; } my $man; { local $/ = undef; $man = <$in_fh>; } close $in_fh; unlink 'out.tmp'; if ($man eq $expected) { print "ok 2\n"; } else { print "not ok 2\n"; print "Expected\n========\n$expected\nOutput\n======\n$man\n"; } } }
my $n = 3; while (<DATA>) { next until $_ eq "###\n"; open (TMP, '> tmp.pod') or die "Cannot create tmp.pod: $!\n"; while (<DATA>) { last if $_ eq "###\n"; print TMP $_; } close TMP; my $parser = Pod::Man->new or die "Cannot create parser\n"; $parser->parse_from_file ('tmp.pod', 'out.tmp'); undef $parser; open (OUT, 'out.tmp') or die "Cannot open out.tmp: $!\n"; while (<OUT>) { last if /^\.TH/ } my $output; { local $/; $output = <OUT>; } close OUT; unlink ('tmp.pod', 'out.tmp'); my $expected = ''; while (<DATA>) { last if $_ eq "###\n"; $expected .= $_; } if ($output eq $expected) { print "ok $n\n"; } else { print "not ok $n\n"; print "Expected\n========\n$expected\nOutput\n======\n$output\n"; } $n++; }
# Below the marker are bits of POD and corresponding expected nroff output. # This is used to test specific features or problems with Pod::Man. The input # and output are separated by lines containing only ###.
__DATA__
### =head1 NAME
gcc - GNU project C and C++ compiler
Other mentions of C++. ### .SH "NAME" gcc \- GNU project C and C++ compiler .SH "\*(C+ NOTES" .IX Header " NOTES" Other mentions of \*(C+. ###
### =head1 PERIODS
This . should be quoted. ### .SH "PERIODS" .IX Header "PERIODS" This \f(CW\*(C`.\*(C'\fR should be quoted. ###
.
### =over 4
A bullet.
Another bullet.
Also a bullet.
Not a bullet.
Also not a bullet.
Not bullet.
### =head1 SEQS
"=over ... =back"
"S<...>"
The quotes should be converted in the above to paired quotes. ### .SH "SEQS" .IX Header "SEQS" \&\*(L"=over ... =back\*(R" .PP \&\*(L"...\*(R" .PP The quotes should be converted in the above to paired quotes. ###
### =head1 YEN
It cost me ¥12345! That should be an X. ### .SH "YEN" .IX Header "YEN" It cost me X12345! That should be an X. ###
### =head1 agrave
Open à la shell. Previous versions mapped it wrong. ### .SH "agrave" .IX Header "agrave" Open a\*` la shell. Previous versions mapped it wrong. ###
### =over
Blah blah blah....
Should be a bullet.
### =head1 LINK QUOTING
There should not be double quotes: (?>pattern). ### .SH "LINK QUOTING" .IX Header "LINK QUOTING" There should not be double quotes: \f(CW\*(C`(?>pattern)\*(C'\fR. ###
(?>pattern)
### =head1 S<> MAGIC
Magic should be applied RISC OS to that. ### .SH " MAGIC" .IX Header " MAGIC" Magic should be applied \s-1RISC\s0\ \s-1OS\s0 to that. ###
### =head1 MAGIC MONEY
These should be identical.
Bippity boppity boo "The price is $100."
Bippity boppity boo "The price is $100." ### .SH "MAGIC MONEY" .IX Header "MAGIC MONEY" These should be identical. .PP Bippity boppity boo \*(L"The price is \f(CW$100\fR.\*(R" .PP Bippity boppity boo \*(L"The price is \f(CW$100\fR.\*(R" ###
"Stuff" (no guesswork)
Oboy, is this C++ "fun" yet! (guesswork) ### .SH "NAME" "Stuff" (no guesswork) .Sh "\s-1THINGS\s0" .IX Subsection "THINGS" Oboy, is this \*(C+ \*(L"fun\*(R" yet! (guesswork) ###
### =head1 Newline C Quote Weirdness
Blorp ' ''. Yes. ### .SH "Newline C Quote Weirdness" .IX Header "Newline C Quote Weirdness" Blorp \f(CW' \&''\fR. Yes. ###
' ''
### =head1 Soft Hypen Testing
sigaction manuscript Jarkko Hietaniemi
And again:
And one more time:
sigaction manuscript Jarkko Hietaniemi ### .SH "Soft Hypen Testing" .IX Header "Soft Hypen Testing" sig\%action manu\%script Jark\%ko Hie\%ta\%nie\%mi .PP And again: .PP sig\%action manu\%script Jark\%ko Hie\%ta\%nie\%mi .PP And one more time: .PP sig\%action manu\%script Jark\%ko Hie\%ta\%nie\%mi ###
### =head1 X<> Whitespace
Blorpy prok wugga chachacha. ### .SH " Whitespace" .IX Header " Whitespace" Blorpy \fBprok\fR wugga chachacha. .IX Xref "bivav" ###
### =head1 Hyphen in S<>
Don't transform even-this hyphen. ### .SH "Hyphen in " .IX Header "Hyphen in " Don't transform\ even-this\ hyphen. ###
14 POD Errors
The following errors were encountered while parsing the POD:
Non-ASCII character seen before =encoding in 'Beyoncé!'. Assuming CP1252
'=item' outside of any '=over'
=back doesn't take any parameters, but you said =back ### .IP "\(bu" 4 A bullet. .IP "\(bu" 4 Another bullet. .IP "\(bu" 4 Also a bullet. ###
Expected text after =item, not a bullet
=back doesn't take any parameters, but you said =back ### .IP "foo" 4 .IX Item "foo" Not a bullet. .IP "*" 4 Also not a bullet. ###
=back doesn't take any parameters, but you said =back ### .IP "1. Not a number" 4 .IX Item "1. Not a number" .PD 0 .IP "2. Spaced right" 4 .IX Item "2. Spaced right" .IP "1 Not a number" 2 .IX Item "1 Not a number" .IP "2 Spaced right" 2 .IX Item "2 Spaced right" ###
=back doesn't take any parameters, but you said =back ### .IP "*" 4 Not bullet. ###
=back doesn't take any parameters, but you said =back ### .IP "First level" 4 .IX Item "First level" Blah blah blah.... .RS 4 .IP "\(bu" 4 Should be a bullet. .RE .RS 4 .RE ###
=back doesn't take any parameters, but you said =back ### .ie n .IP "1. Check fonts in @CARP_NOT test." 4 .el .IP "1. Check fonts in \f(CW@CARP_NOT\fR test." 4 .IX Item "1. Check fonts in @CARP_NOT test." ###
To install Env, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Env
CPAN shell
perl -MCPAN -e shell install Env
For more information on module installation, please visit the detailed CPAN module installation guide.