print OUT <<"!GROK!THIS!";
$Config{startperl}
eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
- if \$running_under_some_shell;
+ if 0;
-\@pagers = ();
+use strict;
+my \@pagers = ();
push \@pagers, "$Config{'pager'}" if -x "$Config{'pager'}";
!GROK!THIS!
# the perl manuals, though it too is written in perl.
if(@ARGV<1) {
- $me = $0; # Editing $0 is unportable
+ my $me = $0; # Editing $0 is unportable
$me =~ s,.*/,,;
die <<EOF;
Usage: $me [-h] [-r] [-i] [-v] [-t] [-u] [-m] [-l] [-F] [-X] PageName|ModuleName|ProgramName
use Getopt::Std;
use Config '%Config';
-@global_found = ();
-$global_target = "";
+my @global_found = ();
+my $global_target = "";
-$Is_VMS = $^O eq 'VMS';
-$Is_MSWin32 = $^O eq 'MSWin32';
-$Is_Dos = $^O eq 'dos';
+my $Is_VMS = $^O eq 'VMS';
+my $Is_MSWin32 = $^O eq 'MSWin32';
+my $Is_Dos = $^O eq 'dos';
sub usage{
warn "@_\n" if @_;
EOF
}
-use Text::ParseWords;
+if( defined $ENV{"PERLDOC"} ) {
+ require Text::ParseWords;
+ unshift(@ARGV, Text::ParseWords::shellwords($ENV{"PERLDOC"}));
+}
+!NO!SUBS!
+my $getopts = "mhtluvriFf:Xq:";
+print OUT <<"!GET!OPTS!";
-unshift(@ARGV,shellwords($ENV{"PERLDOC"}));
+use vars qw( @{[map "\$opt_$_", ($getopts =~ /\w/g)]} );
-getopts("mhtluvriFf:Xq") || usage;
+getopts("$getopts") || usage;
+!GET!OPTS!
-usage if $opt_h || $opt_h; # avoid -w warning
+print OUT <<'!NO!SUBS!';
-$podidx = "$Config{'archlib'}/pod.idx";
-$podidx = "" if $opt_X || !-f "pod.idx" && !-r _ && -M _ > 7;
+usage if $opt_h;
-if ($opt_t + $opt_u + $opt_m + $opt_l > 1) {
+my $podidx;
+if( $opt_X ) {
+ $podidx = "$Config{'archlib'}/pod.idx";
+ $podidx = "" unless -f $podidx && -r _ && -M _ <= 7;
+}
+
+if( (my $opts = do{ local $^W; $opt_t + $opt_u + $opt_m + $opt_l }) > 1) {
usage("only one of -t, -u, -m or -l")
} elsif ($Is_MSWin32 || $Is_Dos) {
- $opt_t = 1 unless $opt_t + $opt_u + $opt_m + $opt_l;
+ $opt_t = 1 unless $opts
}
if ($opt_t) { require Pod::Text; import Pod::Text; }
+my @pages;
if ($opt_f) {
@pages = ("perlfunc");
} elsif ($opt_q) {
if (-d _){
push @p, $p;
if ( $p eq $global_target) {
- $tmp_path = join ('/', @p);
+ my $tmp_path = join ('/', @p);
my $path_f = 0;
for (@global_found) {
$path_f = 1 if $_ eq $tmp_path;
return minus_f_nocase($dir,$file);
} else {
my $path = minus_f_nocase($dir,$file);
- return $path if containspod($path);
+ return $path if length $path and containspod($path);
}
return "";
}
return ();
}
-
+my @found;
foreach (@pages) {
if ($podidx && open(PODIDX, $podidx)) {
my $searchfor = $_;
print STDERR "Searching for $_\n" if $opt_v;
# We must look both in @INC for library modules and in PATH
# for executables, like h2xs or perldoc itself.
- @searchdirs = @INC;
+ my @searchdirs = @INC;
if ($opt_F) {
next unless -r;
push @found, $_ if $opt_m or containspod($_);
for ($i = 0; $trn = $ENV{'DCL$PATH'.$i}; $i++) {
push(@searchdirs,$trn);
}
- push(@dirs,'perl_root:[lib.pod]') # installed pods
+ push(@searchdirs,'perl_root:[lib.pod]') # installed pods
} else {
push(@searchdirs, grep(-d, split($Config{path_sep},
$ENV{'PATH'})));
}
- @files= searchfor(0,$_,@searchdirs);
}
+ my @files = searchfor(0,$_,@searchdirs);
if( @files ) {
print STDERR "Found as @files\n" if $opt_v;
} else {
print STDERR "No documentation found for \"$_\".\n";
if (@global_found) {
print STDERR "However, try\n";
- my $dir = $file = "";
- for $dir (@global_found) {
+ for my $dir (@global_found) {
opendir(DIR, $dir) or die "$!";
- while ($file = readdir(DIR)) {
+ while (my $file = readdir(DIR)) {
next if ($file =~ /^\./);
$file =~ s/\.(pm|pod)$//;
print STDERR "\tperldoc $_\::$file\n";
exit;
}
+my $lines = $ENV{LINES} || 24;
+
+my $no_tty;
if( ! -t STDOUT ) { $no_tty = 1 }
+my $tmp;
if ($Is_MSWin32) {
$tmp = "$ENV{TEMP}\\perldoc1.$$";
push @pagers, qw( more< less notepad );
unshift @pagers, $ENV{PERLDOC_PAGER} if $ENV{PERLDOC_PAGER};
if ($opt_m) {
- foreach $pager (@pagers) {
+ foreach my $pager (@pagers) {
system("$pager @found") or exit;
}
if ($Is_VMS) { eval 'use vmsish qw(status exit); exit $?' }
++$found if /^\w/; # found descriptive text
}
if (@pod) {
- my $lines = $ENV{LINES} || 24;
-
if ($opt_t) {
open(FORMATTER, "| pod2text") || die "Can't start filter";
print FORMATTER "=over 8\n\n";
} elsif (@pod < $lines-2) {
print @pod;
} else {
- foreach $pager (@pagers) {
+ foreach my $pager (@pagers) {
open (PAGER, "| $pager") or next;
print PAGER @pod ;
close(PAGER) or next;
print FORMATTER @pod;
print FORMATTER "=back\n";
close(FORMATTER);
- } else {
+ } elsif (@pod < $lines-2) {
print @pod;
+ } else {
+ foreach my $pager (@pagers) {
+ open (PAGER, "| $pager") or next;
+ print PAGER @pod ;
+ close(PAGER) or next;
+ last;
+ }
}
} else {
- die "No documentation for perl function `$opt_f' found\n";
+ die "No documentation for perl FAQ keyword `$opt_q' found\n";
}
exit;
}
foreach (@found) {
+ my $err;
if($opt_t) {
open(TMP,">>$tmp");
Pod::Text::pod2text($_,*TMP);
} elsif(not $opt_u) {
my $cmd = "pod2man --lax $_ | nroff -man";
$cmd .= " | col -x" if $^O =~ /hpux/;
- $rslt = `$cmd`;
+ my $rslt = `$cmd`;
unless(($err = $?)) {
open(TMP,">>$tmp");
print TMP $rslt;
if( $opt_u or $err or -z $tmp) {
open(OUT,">>$tmp");
open(IN,"<$_");
- $cut = 1;
+ my $cut = 1;
while (<IN>) {
$cut = $1 eq 'cut' if /^=(\w+)/;
next if $cut;
print while <TMP>;
close(TMP);
} else {
- foreach $pager (@pagers) {
+ foreach my $pager (@pagers) {
system("$pager $tmp") or last;
}
}
B<perldoc> B<-f> BuiltinFunction
+B<perldoc> B<-q> FAQ Keyword
+
=head1 DESCRIPTION
I<perldoc> looks up a piece of documentation in .pod format that is embedded
The B<-f> option followed by the name of a perl built in function will
extract the documentation of this function from L<perlfunc>.
+=item B<-q> perlfaq
+
+The B<-q> option takes a regular expression as an argument. It will search
+the question headings in perlfaq[1-9] and print the entries matching
+the regular expression.
+
=item B<-X> use an index if present
The B<-X> option looks for a entry whose basename matches the name given on the
=cut
#
+# Version 1.14: Wed Jul 15 01:50:20 EST 1998
+# Robin Barker <rmb1@cise.npl.co.uk>
+# -strict, -w cleanups
# Version 1.13: Fri Feb 27 16:20:50 EST 1997
# Gurusamy Sarathy <gsar@umich.edu>
# -doc tweaks for -F and -X options