Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Perldoc Keyword Search (update3)

by LanX (Canon)
on Feb 16, 2012 at 05:44 UTC ( #954149=CUFP: print w/ replies, xml ) Need Help??

... or how to find X<>-refs in Pod and search them in pager

Problem

Did you ever try to find the documentation of the ".." (flip-flop) operator?

typing perldoc -f .. doesn't help ...

$ perldoc -f .. No documentation for perl function `..' found
But perldocs have tags like X<..> indicating the right documentation, only the formatters are missing.

Previous discussions

  • [perldoc] keyword search or
  • So whats new about pod and X<>-tag? How to check current development?

    Approach

  • Grep core-Pods for X<TAGS>.

  • Insert marker in front of every hit.

  • Call pager (here less) with default search pattern to find those markers.

    Usage

  • type pdoc qr to find all references for qr.

  • Typing n and N will jump from marker to marker.

  • After quitting a manpage qthe next is built and displayed

    Prove of concept

    Just a hack ("release often" dogma)

    Tested for linux.

    file "pdoc"
    #!/usr/bin/perl use strict; # use Data::Dump; my $poddir = `perldoc -l perltoc`; chomp $poddir; $poddir =~ s/perltoc/*/; my $pattern = $ARGV[0]; my @pods= grep {! /perltoc/} `grep -l -F 'X<$pattern>' $poddir`; chomp @pods; # dd @pods; for my $infile (@pods) { open my $in, "<", $infile; my $outfile = "/tmp/". (split "/",$infile)[-1]; open my $out,">", $outfile; local $/="\n\n"; my $marker = ">>> X<$pattern> <<<"; #"MARK"; while (my $para = <$in>){ print $out "\nC<<<< $marker >>>>\n\n" if $para =~ /X<\Q$pattern\E>/; print $out $para; } close $out; my $ret = `pod2man $outfile |nroff -man > /tmp/tmp.man`; print system("less -p \"$marker\" /tmp/tmp.man") }

    Cheers Rolf

  • Comment on Perldoc Keyword Search (update3)
    Select or Download Code
    Re: Perldoc Keyword Search (update4)
    by LanX (Canon) on Apr 21, 2013 at 11:15 UTC
      Update 4

      For usage see Re: perl docs -- I am so sick of...

      cat /home/lanx/perl/bin/pd

      >

      #!/usr/bin/perl use strict; use Data::Dump; my $pattern = $ARGV[0]; my $poddir = `perldoc -l perltoc`; chomp $poddir; $poddir =~ s/perltoc/*/; #print `grep -l3 -F 'X<$pattern>' $poddir`; # find pods excep +t perltoc my @pods= grep {! /perltoc/} `grep -l -F 'X<$pattern>' $poddir`; # find pods except perlto +c # rank pods with default=500 @pods = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { /faq/ ? [$_=> 700] : /delta/ ? [$_ => 900] : /var/ ? [$_ => 100 ] : /func/ ? [$_ => 200 ] : [$_ => 500] } @pods; if (not @pods) { print "No matches found\n"; } else { print "Matches for $pattern found in :\n @pods"; } chomp @pods; #dd @pods; for my $infile (@pods) { open my $in, "<", $infile; my $outfile = "/tmp/". (split "/",$infile)[-1]; open my $out,">", $outfile; my $marker = ">>> X<$pattern> <<<"; #"MARK"; my ($podname) = ( $infile =~ /\/(\w*)\.pod$/); local $/="\n\n"; # split paragraphs while (my $para = <$in>){ print $out "\nC<<<< $marker >>>> in $podname\n\n" # prepend + marker if $para =~ /X<\Q$pattern\E>/; print $out $para; } close $out; my $ret = `pod2man $outfile |nroff -man > /tmp/tmp.man`; my $system = system( 'less -p \'' . shellescape($marker) . '\' /tmp/ +tmp.man'); print $system if $system ne 0; } sub shellescape { my ($str) = @_; $str =~ s/\$/\\\$/; #print "$str\n"; return $str; }

      Cheers Rolf

      ( addicted to the Perl Programming Language)

    Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Node Status?
    node history
    Node Type: CUFP [id://954149]
    Approved by Corion
    Front-paged by Corion
    help
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others making s'mores by the fire in the courtyard of the Monastery: (6)
    As of 2014-08-02 06:42 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      Who would be the most fun to work for?















      Results (55 votes), past polls