Practical Extraction and Report Language (oder: Pathologic Eclectic Rubbish Lister): Sprache für Zeichen-, String- und Musterverarbeitung ähnlich wie awk und sed; Neben Methoden für Zeichenverarbeitung auch gute Anbindung an Betriebssystem-Interfaces (siehe Section 2 und 3 Manpages).
man perl, weitere manpages
perldoc:
rfhpc8317% perldoc
Usage: perldoc [-h] [-r] [-i] [-v] [-t] [-u] [-m] [-l] [-F] [-X] PageName|ModuleName|ProgramName
perldoc -f PerlFunc
perldoc -q FAQKeywords
The -h option prints more help. Also try "perldoc perldoc" to get
aquainted with the system.
Für die Basics SEHR empfehlenswert: die perl Version
4 Manpage
perl -e '...' (vgl. sh -c)
perl meinscript
./script mit erster Zeile "#!/soft/bin/perl" + "chmod +x"
17
19.42
"string"
$foo
$array[17]
$hash{'key'}
@foo
$foo[1]
( "a", 1, 'b', 2, 17.95 )
@statresult = stat("/etc/passwd"
%foo
$foo{'bar'}
$foo{$bar}
( 'Jan' => 1, 'Feb' => 2, ... )
References to scalar variables always begin with '$', even
when referring to a scalar that is part of an array. Thus:
$days # a simple scalar variable
$days[28] # 29th element of array @days
$days{'Feb'} # one value from an associative array
$#days # last index of array @days
but entire arrays or array slices are denoted by '@':
@days # ($days[0], $days[1],... $days[n])
@days[3,4,5] # same as @days[3..5]
@days{'a','c'} # same as ($days{'a'},$days{'c'})
and entire associative arrays are denoted by '%':
%days # (key1, val1, key2, val2 ...)
rfhpc8317% perl -e 'print "Hallo Welt\n";'
Hallo Welt
rfhpc8317%
rfhpc8317% cat args.pl
print "$#ARGV: @ARGV\n";
print $#ARGV, ": ", @ARGV, "\n";
rfhpc8317% perl args.pl
-1:
-1:
rfhpc8317% perl args.pl a
0: a
0: a
rfhpc8317% perl args.pl a b
1: a b
1: ab
rfhpc8317% perl args.pl a b c
2: a b c
2: abc
rfhpc8317% perl -e '$a=<>; print "$a";' < /etc/passwd
root:x:0:1:Super-User:/root:/sbin/sh
rfhpc8317% perl -e '$a=<>; print "$a";' /etc/passwd
root:x:0:1:Super-User:/root:/sbin/sh
rfhpc8317% perl -e '@a=<>; print "@a\n";' /etc/passwd
root:x:0:1:Super-User:/root:/sbin/sh
daemon:x:1:1::/:
bin:x:2:2::/usr/bin:
sys:x:3:3::/:
...
rfhpc8317% cat openclose.pl #!/soft/bin/perl open(IN, "/etc/passwd") || die "Kann /etc/passwd nicht lesen: $!\n"; open(OUT, ">p") || die "Kann 'p' nicht schreiben: $!\n"; $a = <IN>; print OUT "$a"; $a = <IN>; print OUT "$a"; $a = <IN>; print OUT "$a"; close(IN); close(OUT); rfhpc8317% touch p rfhpc8317% chmod -w p rfhpc8317% ./openclose.pl Kann 'p' nicht schreiben: Permission denied rfhpc8317% ls -la p -r--r--r-- 1 feyrer bedienst 75 Apr 25 13:10 p rfhpc8317% rm -f p rfhpc8317% ./openclose.pl rfhpc8317% cat p root:x:0:1:Super-User:/root:/sbin/sh daemon:x:1:1::/: bin:x:2:2::/usr/bin: rfhpc8317%Zugriffe:
-r File is readable by effective uid/gid. -w File is writable by effective uid/gid. -x File is executable by effective uid/gid. -o File is owned by effective uid. -R File is readable by real uid/gid. -W File is writable by real uid/gid. -X File is executable by real uid/gid. -O File is owned by real uid. -e File exists. -z File has zero size. -s File has non-zero size (returns size). -f File is a plain file. -d File is a directory. -l File is a symbolic link. -p File is a named pipe (FIFO). -S File is a socket. -b File is a block special file. -c File is a character special file. -u File has setuid bit set. -g File has setgid bit set. -k File has sticky bit set. -t Filehandle is opened to a tty. -T File is a text file. -B File is a binary file (opposite of -T). -M Age of file in days when script started. -A Same for access time. -C Same for inode change time.
if ( $fooflag ) { print "foo\n"; }
print "bar\n" if $barflag;
if ( $a == 0 ) { ... }
elsif ( $a < 0 ) { ... }
else { ... }
rfhpc8317% cat arg.pl
#!/soft/bin/perl
if ( $ARGV[0] eq "-a" ) {
$allflag = 1;
shift @ARGV;
}
print "$ARGV[0] (allflag=$allflag)\n";
rfhpc8317% ./arg.pl bla
bla (allflag=)
rfhpc8317% ./arg.pl -a bla
bla (allflag=1)
rfhpc8317%
rfhpc8317% cat absrel.pl
#!/soft/bin/perl
if ( $ARGV[0] =~ m,^/, ) {
print "Absoluter Pfad: $ARGV[0]\n";
} else {
print "Relativer Pfad: $ARGV[0]\n";
}
rfhpc8317% ./absrel.pl /foo
Absoluter Pfad: /foo
rfhpc8317% ./absrel.pl bar
Relativer Pfad: bar
rfhpc8317% perl -e '-f "/etc/passwd" || print "not a file\n";' rfhpc8317% perl -e '-f "/etc/foobla" || print "not a file\n";' not a file rfhpc8317% open(...) || die "...";
$debug=1; $debug && print "Debug-Ausgabe\n";
rfhpc8317% perl -e 'while ( 1 ) { system("uptime"); sleep(5); }'
2:32pm up 2 day(s), 3:21, 7 users, load average: 0.01, 0.02, 0.13
2:32pm up 2 day(s), 3:21, 7 users, load average: 0.01, 0.02, 0.13
^C
rfhpc8317% cat countdown.pl
#!/soft/bin/perl
$i=10;
while($i > 0) {
print $i--, " ";
}
print "*\n";
rfhpc8317% perl countdown.pl
10 9 8 7 6 5 4 3 2 1 *
rfhpc8317%
rfhpc8317% cat countdown2.pl
#!/soft/bin/perl
$i=10;
do {
print "$i ";
$i--;
} while ($i > 0);
print "*\n";
rfhpc8317% perl countdown2.pl
10 9 8 7 6 5 4 3 2 1 *
rfhpc8317%
rfhpc8317% cat for.pl
#!/soft/bin/perl
for($i = 10; $i > 0; $i--) {
print "$i ";
}
print "* \n";
rfhpc8317% perl for.pl
10 9 8 7 6 5 4 3 2 1 *
rfhpc8317% perl -e 'foreach $i ( 1, 2, 3 ) { print "$i\n" ; }'
1
2
3
rfhpc8317% perl -e 'foreach $i ( @ARGV ) { print "$i\n" ; }'
rfhpc8317% perl -e 'foreach $i ( @ARGV ) { print "$i\n" ; }' 1 2 3
1
2
3
rfhpc8317% perl -e 'foreach $x ( split(" ", "a b c")) { print "$x\n"; }'
a
b
c
line:
while(<>) {
if (/^#/) {
next line; # Kommentarzeilen ueberspringen
}
if (/DATEIENDE) {
last line; # Ende-Kennzeichen
}
...
}
\w Match a "word" character (alphanumeric plus "_") \W Match a non-word character \s Match a whitespace character \S Match a non-whitespace character \d Match a digit character \D Match a non-digit character
if ( /muster/ ) { print "Muster gefunden!\n"; }
if ( /muster/i ) { print "Muster gefunden!\n"; }
if ( m,muster, ) { print "Muster gefunden!\n"; }
if ( $string =~ /muster/ ) { print "Muster gefunden!\n"; }
if ( $string !~ /muster/ ) { print "Muster NICHT gefunden!\n"; }
rfhpc8317% head -2 /vardata/logs/apache/access
195.65.218.118 - - [30/Oct/2001:16:27:04 +0100] "GET /~feyrer/PoolDoku/Bandlaufwerk.html HTTP/1.0" 200 9326
pd9e0e803.dip.t-dialin.net - - [30/Oct/2001:16:27:08 +0100] "GET /~brm30808/smsanbieter/banner/banner468-2.gif HTTP/1.1" 304 -
rfhpc8317% head -2 /vardata/logs/apache/access \
? | perl -e 'while(<>) { /^(\S*).*"([^"]*)"/; print "$1 abruf: $2\n"; }'
195.65.218.118 abruf: GET /~feyrer/PoolDoku/Bandlaufwerk.html HTTP/1.0
pd9e0e803.dip.t-dialin.net abruf: GET /~brm30808/smsanbieter/banner/banner468-2.gif HTTP/1.1
rfhpc8317% head -2 /vardata/logs/apache/access \
? | perl -ne '/^(\S*).*"([^"]*)"/; print "$1 abruf: $2\n"; '
195.65.218.118 abruf: GET /~feyrer/PoolDoku/Bandlaufwerk.html HTTP/1.0
pd9e0e803.dip.t-dialin.net abruf: GET
/~brm30808/smsanbieter/banner/banner468-2.gif HTTP/1.1
rfhpc8317% head -2 /vardata/logs/apache/access \
? | perl -ne '($host, $request) = /^(\S*).*"([^"]*)"/; print "$host abruf: $request\n"; '
195.65.218.118 abruf: GET /~feyrer/PoolDoku/Bandlaufwerk.html HTTP/1.0
pd9e0e803.dip.t-dialin.net abruf: GET /~brm30808/smsanbieter/banner/banner468-2.gif HTTP/1.1
rfhpc8317% head -2 /vardata/logs/apache/access \
? | perl -ne '$line = $_; ($host, $request) = $line =~ /^(\S*).*"([^"]*)"/; print "$host abruf: $request\n"; '
195.65.218.118 abruf: GET /~feyrer/PoolDoku/Bandlaufwerk.html HTTP/1.0
pd9e0e803.dip.t-dialin.net abruf: GET /~brm30808/smsanbieter/banner/banner468-2.gif HTTP/1.1
@foo = ( 1, 2, 3);
( $foo, $bar ) = @baz;
( $erstes, $drittes ) = (@baz)[1,3];
@words = split(/\s+/, $string);
$neuer_string = join(" ", @words);
@statresults = stat("/etc/passwd");
$filesize = $statresults[7]; # perldoc -f stat
$filesize = ( stat("/etc/passwd") )[7];
%hash = ( 'Jan' => 1,
'Feb' => 2,
...
'Dez' => 12, );
@liste_aller_keys = keys( %hash );
@liste_aller_werte = values( %hash );
#!/soft/bin/perl
# Dateiaufbau Apache Logfile:
# rfhpc8317% head /vardata/logs/apache/access
# 195.65.218.118 - - [30/Oct/2001:16:27:04 +0100] "GET /~feyrer/PoolDoku/Bandlaufwerk.html HTTP/1.0" 200 9326
# pd9e0e803.dip.t-dialin.net - - [30/Oct/2001:16:27:08 +0100] "GET /~brm30808/smsanbieter/banner/banner468-2.gif HTTP/1.1" 304 -
# 1. Zugriffe pro Datei ermitteln
$log="/vardata/logs/apache/access";
open(LOG, "$log") || die;
while(){
( $file, $rc, $size) = m@\[..*\].*"GET ([^"]*) HTTP/1\..\\?" (\d+) (\S+)@;
next if $size !~ /\d/; # Misses ueberspringen
next if $rc == 404; # Misses ueberspringen
$access{$file}++; # Zaehler fuer Datei erhoehen
#print "$file: $size, rc=$rc\n";
}
close(LOG);
# 2. Datei mit den meisten Zugriffen ermitteln und ausgeben
$maxfile = "";
$maxcount = -1;
foreach $file ( keys %access ) {
if ( $access{$file} > $maxcount) {
$maxcount = $access{$file};
$maxfile = $file;
}
}
print "$maxfile: $maxcount Zugriffe\n";
$str = sprintf("%04d%02d%02d", $year, $month, $day);
$len = length($str);
chomp($string);
@array = split(REGEXP, $string);
$string = join($trenner, @array);
@sorted_list = sort(@list);
@reversed_list = reverse(@list);
open(HANDLE, "file"); <HANDLE>; close(HANDLE);
opendir(HANDLE, "dir"); $entry = readdir(HANDLE); closedir(HANDLE);
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks)
= stat($filename);
chdir("..");
chmod(0700, $file);
link($alt, $neu);
symlink($alt, $neu);
rename($alt, $neu);
unlink($file);
mkdir($dir);
rmdir($dir);
$childpid = fork();
exec("ls");
system("ls");
$my_pid = getpid();
$parent_pid = getppid();
kill(15, $pid);
wait();
waitpid($pid);
($user,$system,$cuser,$csystem) = times();
pipe(READHANDLE, WRITEHANDLE);
socket(SOCKET, DOMAIN, TYPE, PROTOCOL);
connect(SOCKET, NAME);
bind(SOCKET, NAME);
listen(SOCKET, $queuesize);
accept(NEWSOCKET, GENERICSOCKET);
$peer = getpeername(SOCKET);
Fetching user and group info
endgrent, endhostent, endnetent, endpwent, getgrent,
getgrgid, getgrnam, getlogin, getpwent, getpwnam,
getpwuid, setgrent, setpwent
Fetching network info
endprotoent, endservent, gethostbyaddr, gethostbyname,
gethostent, getnetbyaddr, getnetbyname, getnetent,
getprotobyname, getprotobynumber, getprotoent,
getservbyname, getservbyport, getservent, sethostent,
setnetent, setprotoent, setservent
($name,$passwd,$uid,$gid,
$quota,$comment,$gcos,$dir,$shell,$expire) = getpw*
($name,$passwd,$gid,$members) = getgr*
($name,$aliases,$addrtype,$length,@addrs) = gethost*
($name,$aliases,$addrtype,$net) = getnet*
($name,$aliases,$proto) = getproto*
($name,$aliases,$port,$proto) = getserv*
Beispiel 1:
rfhpc8317% cat /tmp/sub.pl
sub myprint
{
print "mine: @_\n";
}
myprint();
myprint("foo", "bar");
rfhpc8317% perl /tmp/sub.pl
mine:
mine: foo bar
Beispiel 2:
rfhpc8317% cat /tmp/div.pl
sub div {
($a, $b) = @_;
die "Fehler: Division durch Null"
if $b == 0;
return $a / $b;
}
print div(10, 2), "\n";
print div(10, 5), "\n";
print div(10, 0), "\n";
rfhpc8317% perl /tmp/div.pl
5
2
Fehler: Division durch Null at /tmp/div.pl line 4.
rfhpc8317%
Achtung! Per default sind Variablen global, um sie als lokal zu deklarieren muss dies explizit angegeben werden:
rfhpc8317% cat /tmp/div.pl
sub div {
my ($a, $b) = @_;
...
rfhpc8317% cat ref1.pl $a = 17; $r = \$a; print $$r, "\n"; rfhpc8317% perl ref1.pl 17
rfhpc8317% cat ref2.pl @a = ( 1, 2, 3 ); $r1 = \@a; print "$$r1[1]\n"; print "$r1->[1]\n"; $r2 = [ 17, 42, 93 ]; print "$r2->[1]\n"; rfhpc8317% perl ref2.pl 2 2 42
rfhpc8317% cat ref3.pl
%h = ( "Jan" => 1, "Feb" => 2, "Mar" => 3 );
$r1 = \%h;
print $$r1{"Feb"}, "\n";
print $r1->{"Feb"}, "\n";
$r2 = { "Jan" => 1, "Feb" => 2, "Mar" => 3 };
print $r2->{"Feb"}, "\n";
rfhpc8317% perl ref3.pl
2
2
2
rfhpc8317% cat 09-demo1.cgi
#!/soft/bin/perl
print "Content-type: text/plain\n";
print "\n";
print "$ENV{'QUERY_STRING'}\n";
rfhpc8317% links -source 'http://www.feyrer.de/SA/09-demo1.cgi?bla=blubber'
bla=blubber
rfhpc8317% links -source 'http://www.feyrer.de/SA/09-demo1.cgi?bla=blub%20ber'
bla=blub%20ber
rfhpc8317% cat 09-demo2.cgi
#!/soft/bin/perl
use CGI qw/:standard/;;
print header("text/plain");
$query = new CGI;
$bla = $query->param('bla');
print "bla = [$bla]\n";
rfhpc8317% links -source http://www.feyrer.de/SA/09-demo2.cgi
bla = []
rfhpc8317% links -source 'http://www.feyrer.de/SA/09-demo2.cgi?bla=blubber'
bla = [blubber]
rfhpc8317% links -source 'http://www.feyrer.de/SA/09-demo2.cgi?bla=blub%20ber'
bla = [blub ber]
rfhpc8317% cat listmodules
cd /usr/lib/perl5/5.8.5
for i in `find . -name \*.pm`
do
cat $i \
| grep -v '^$' \
| sed -n -e '/^=head1.*NAME/,$p' \
| head -2 \
| grep -v =head1 \
| sed -e 's/B<\([^>]*\)>/\1/' \
-e 's/<eval>//' \
-e 's/^ *//'
done
rfhpc8317% sh /tmp/listmodules | sort -f
abbrev - create an abbreviation table from a list
AnyDBM_File - provide framework for multiple DBMs
Attribute::Handlers - Simpler definition of attribute handlers
attributes - get/set subroutine or variable attributes
attrs - set/get attributes of a subroutine (deprecated)
AutoLoader - load subroutines only on demand
AutoSplit - split a package for autoloading
autouse - postpone load of modules until a function is used
B - The Perl Compiler
B::Asmdata - Autogenerated data about Perl ops, used to generate bytecode
B::Assembler - Assemble Perl bytecode
B::Bblock - Walk basic blocks
B::Bytecode - Perl compiler's bytecode backend
B::C - Perl compiler's C backend
B::CC - Perl compiler's optimized C translation backend
B::Concise - Walk Perl syntax tree, printing concise info about ops
B::Debug - Walk Perl syntax tree, printing debug info about ops
B::Deparse - Perl compiler backend to produce perl code
B::Disassembler - Disassemble Perl bytecode
B::Lint - Perl lint
B::Showlex - Show lexical variables used in functions or files
B::Stackobj - Helper module for CC backend
B::Stash - show what stashes are loaded
B::Terse - Walk Perl syntax tree, printing terse info about ops
B::Xref - Generates cross reference reports for Perl programs
base - Establish IS-A relationship with base classes at compile time
Benchmark - benchmark running times of Perl code
bigint - Transparent BigInteger support for Perl
bignum - Transparent BigNumber support for Perl
bigrat - Transparent BigNumber/BigRational support for Perl
blib - Use MakeMaker's uninstalled version of a package
ByteLoader - load byte compiled perl code
bytes - Perl pragma to force byte semantics rather than character semantics
carp - warn of errors (from perspective of caller)
Carp::Heavy - heavy machinery, no user serviceable parts inside
CGI - Simple Common Gateway Interface Class
CGI::Apache - Backward compatibility module for CGI.pm
CGI::Carp - CGI routines for writing to the HTTPD (or other) error log
CGI::Cookie - Interface to Netscape Cookies
CGI::Fast - CGI Interface for Fast CGI
CGI::Pretty - module to produce nicely formatted HTML code
CGI::Push - Simple Interface to Server Push
CGI::Switch - Backward compatibility module for defunct CGI::Switch
CGI::Util - Internal utilities used by CGI module
charnames - define character names for C<\N{named}> string literal escapes
Class::ISA -- report the search path for a class's ISA tree
Class::Struct - declare struct-like datatypes as Perl classes
constant - Perl pragma to declare constants
CPAN - query, download and build perl modules from CPAN sites
CPAN::FirstTime - Utility for CPAN::Config file Initialization
CPAN::Nox - Wrapper around CPAN.pm without using any XS module
Cwd - get pathname of current working directory
Data::Dumper - stringified perl data structures, suitable for both printing and C
DB - programmatic interface to the Perl debugging API (draft, subject to
DBM_Filter -- Filter DBM keys/values
DB_File - Perl5 access to Berkeley DB version 1.x
Devel::DProf - a Perl code profiler
Devel::Peek - A data debugging tool for the XS programmer
Devel::PPPort - Perl/Pollution/Portability
Devel::SelfStubber - generate stubs for a SelfLoading module
diagnostics, splain - produce verbose warning diagnostics
Digest - Modules that calculate message digests
Digest::base - Digest base class
Digest::MD5 - Perl interface to the MD5 Algorithm
DirHandle - supply object methods for directory handles
Dumpvalue - provides screen dump of Perl data.
DynaLoader - Dynamically load C libraries into Perl code
Encode - character encodings
Encode::Alias - alias definitions to encodings
Encode::Byte - Single Byte Encodings
Encode::CJKConstants.pm -- Internally used by Encode::??::ISO_2022_*
Encode::CN - China-based Chinese Encodings
Encode::CN::HZ -- internally used by Encode::CN
Encode::Config -- internally used by Encode
Encode::EBCDIC - EBCDIC Encodings
Encode::Encoder -- Object Oriented Encoder
Encode::Encoding - Encode Implementation Base Class
Encode::Guess -- Guesses encoding from data
Encode::JP - Japanese Encodings
Encode::JP::H2Z -- internally used by Encode::JP::2022_JP*
Encode::JP::JIS7 -- internally used by Encode::JP
Encode::KR - Korean Encodings
Encode::KR::2022_KR -- internally used by Encode::KR
Encode::MIME::Header -- MIME 'B' and 'Q' header encoding
Encode::Symbol - Symbol Encodings
Encode::TW - Taiwan-based Chinese Encodings
Encode::Unicode -- Various Unicode Transformation Formats
Encode::Unicode::UTF7 -- UTF-7 encoding
encoding - allows you to write your script in non-ascii or non-utf8
English - use nice English (or awk) names for ugly punctuation variables
Env - perl module that imports environment variables as scalars or arrays
Errno - System errno constants
Exporter - Implements default import method for modules
Exporter::Heavy - Exporter guts
ExtUtils::Command - utilities to replace common UNIX commands in Makefiles etc.
ExtUtils::Command::MM - Commands for the MM's to use in Makefiles
ExtUtils::Constant - generate XS code to import C header constants
ExtUtils::Embed - Utilities for embedding Perl in C/C++ applications
ExtUtils::Install - install files from here to there
ExtUtils::Installed - Inventory management of installed modules
ExtUtils::Liblist - determine libraries to use and how to use them
ExtUtils::MakeMaker - Create a module Makefile
ExtUtils::MakeMaker::bytes - Version agnostic bytes.pm
ExtUtils::MakeMaker::vmsish - Platform agnostic vmsish.pm
ExtUtils::Manifest - utilities to write and check a MANIFEST file
ExtUtils::Miniperl, writemain - write the C code for perlmain.c
ExtUtils::Mkbootstrap - make a bootstrap file for use by DynaLoader
ExtUtils::Mksymlists - write linker options files for dynamic extension
ExtUtils::MM - OS adjusted ExtUtils::MakeMaker subclass
ExtUtils::MM_Any - Platform-agnostic MM methods
ExtUtils::MM_BeOS - methods to override UN*X behaviour in ExtUtils::MakeMaker
ExtUtils::MM_Cygwin - methods to override UN*X behaviour in ExtUtils::MakeMaker
ExtUtils::MM_DOS - DOS specific subclass of ExtUtils::MM_Unix
ExtUtils::MM_MacOS - methods to override UN*X behaviour in ExtUtils::MakeMaker
ExtUtils::MM_NW5 - methods to override UN*X behaviour in ExtUtils::MakeMaker
ExtUtils::MM_OS2 - methods to override UN*X behaviour in ExtUtils::MakeMaker
ExtUtils::MM_Unix - methods used by ExtUtils::MakeMaker
ExtUtils::MM_UWIN - U/WIN specific subclass of ExtUtils::MM_Unix
ExtUtils::MM_VMS - methods to override UN*X behaviour in ExtUtils::MakeMaker
ExtUtils::MM_Win32 - methods to override UN*X behaviour in ExtUtils::MakeMaker
ExtUtils::MM_Win95 - method to customize MakeMaker for Win9X
ExtUtils::MY - ExtUtils::MakeMaker subclass for customization
ExtUtils::Packlist - manage .packlist files
ExtUtils::testlib - add blib/* directories to @INC
Fatal - replace functions with equivalents which succeed or die
Fcntl - load the C Fcntl.h defines
fields - compile-time class fields
File::Compare - Compare files or filehandles
File::Copy - Copy files or filehandles
File::DosGlob - DOS like globbing and then some
File::Find - Traverse a directory tree.
File::Glob - Perl extension for BSD glob routine
File::Path - create or remove directory trees
File::Spec - portably perform operations on file names
File::Spec::Cygwin - methods for Cygwin file specs
File::Spec::Epoc - methods for Epoc file specs
File::Spec::Functions - portably perform operations on file names
File::Spec::Mac - File::Spec for Mac OS (Classic)
File::Spec::OS2 - methods for OS/2 file specs
File::Spec::Unix - File::Spec for Unix, base for other File::Spec modules
File::Spec::VMS - methods for VMS file specs
File::Spec::Win32 - methods for Win32 file specs
File::stat - by-name interface to Perl's built-in stat() functions
File::Temp - return name and handle of a temporary file safely
FileCache - keep more files open than the system permits
FileHandle - supply object methods for filehandles
fileparse - split a pathname into pieces
filetest - Perl pragma to control the filetest permission operators
Filter::Simple - Simplified source filtering
Filter::Util::Call - Perl Source Filter Utility Module
FindBin - Locate directory of original perl script
GDBM_File - Perl5 access to the gdbm library.
getopt, getopts - Process single-character switches with switch clustering
Getopt::Long - Extended processing of command line options
Hash::Util - A selection of general-utility hash subroutines
I18N::Collate - compare 8-bit scalar data according to the current locale
I18N::Langinfo - query locale information
I18N::LangTags - functions for dealing with RFC3066-style language tags
I18N::LangTags::Detect - detect the user's language preferences
I18N::LangTags::List -- tags and names for human languages
if - C
02_Perl_Core_Modules: Acme Alias Attribute AutoLoader B Bleach CIPP Carp Concurrent Config DynaLoader End English Error Exporter Filesys Filter IniConf Inline Module NEXT O Opcode Perl Perl6 PerlIO Pod Regexp Safe SelfLoader Softref Symbol Taint Test Thread UNIVERSAL builtin constant diagnostics enum ex integer less lib overload sigtrap strict subs vars 03_Development_Support: AutoSplit Benchmark Bleach ClearCase Conjury Continuus Coy Devel Exception ExtUtils FindBin Include Make Module Oak P4 Perf Perlbug Rcs Smirch Sub Test Usage VCS 04_Operating_System_Interfaces: Async AudioCD B BSD Be Device Env Errno Fcntl GTop HPUX Hardware Ioctl Linux MSDOS MVS Mac OS2 POSIX Proc Quota SGI Schedule Shell Solaris Sys Unix VMS 05_Networking_Devices_IPC: CORBA ControlX10 DCE DNS Fwctl IPC IPChains IPTables LSF Modem Mon Net NetAddr NetPacket Parallel Proxy Ptty RADIUS RAS RPC Replication SNMP SOAP Socket Socket6 TFTP 06_Data_Type_Utilities: Algorithm Algorithms Array BabelObjects Bit Boulder Calendar Class Clone DFA Data Date Decision FreezeThaw GDS2 Graph Hash Heap List MOP Math ObjStore Object PDL POE Persistence Persistent Quantum Ref Scalar Set Sort Statistics Storable Tangram Thesaurus Tie Time Tree WDDX X500 YAML 07_Database_Interfaces: Ace Alzabo AnyDBM_File AsciiDB BBDB BTRIEVE BerkeleyDB CDB_File CDDB DBD DBI DBIx DBM DBZ_File DB_File DDL DWH_File Db DbFramework Fame FameHLI GDBM_File Ingperl MARC MLDBM MSSQL Metadata Msql MySQL Mysql NDBM_File Netscape ODBM_File OLE ObjStore Oraperl Palm Pg PgSQL Pogo Postgres Relations SDBM_File Spectrum Spreadsheet Sprite Sybase Thesaurus WAIT Wais X500 XBase Xbase 08_User_Interfaces: Cdk Cmenu Curses Dialog Emacs Event Gimp Glade Gnome Gtk PPresenter PV Prima Puppet Qt Rc Sx Term Tk X11 Xforms 09_Language_Interfaces: Blatte C FFI FameHLI Guile Java JavaScript Language Python Rc ShellScript SystemC Tcl Verilog 10_File_Names_Systems_Locking: Cwd Dir File Filesys LockFile Stat 11_String_Lang_Text_Proc: Barcode CSS Chatbot ERG Email Font Frontier Lingua Number PCL PDF Parse PostScript Quiz RDF RTF SGML SGMLS SQL Search String Syntax TeX Template Text Whitespace X500 XML dTemplate 12_Opt_Arg_Param_Proc: App AppConfig Argv CfgTie ConfigReader Getargs Getopt IniConf Resources Sparky 13_Internationalization_Locale: Cz Geography I18N Locale No Sort Unicode 14_Security_and_Encryption: Authen Crypt DES Decision Des Digest GnuPG MD5 OpenCA PGP RADIUS SHA User 15_World_Wide_Web_HTML_HTTP_CGI: ASP Apache C CGI CGI_Lite CIPP CSS Catalog Circa FCGI HTML HTTP HTTPD HyperWave Jabber LWP MIME Netscape OurNet PApp Slash UDDI URI WAP WDDX WML WWW WebCache WebFS 16_Server_and_Daemon_Utilities: Event EventServer FUSE MailBot NetServer Server 17_Archiving_and_Compression: AppleII Archive BBDB Cache Compress Convert PPM RPM 18_Images_Pixmaps_Bitmaps: Chart GD GIFgraph Gimp GraphViz Graphics Image Imager MP3 MPEG OpenGL PGPLOT RenderMan SVG VRML Xmms 19_Mail_and_Usenet_News: IMAP Mail NNML News Sendmail 20_Control_Flow_Utilities: AtExit Callback Coro Hook Memoize ReleaseAction Religion Strict 21_File_Handle_Input_Output: DirHandle Expect FileCache FileHandle IO Log SelectSaver 22_Microsoft_Windows_Modules: Win32 Win32API 23_Miscellaneous_Modules: AI ARS Agent Archie Astro Audio Bio BnP Bundle Business CPAN Chemistry Cisco CompBio Decision Embedix FAQ Festival Finance GSM Games Gann Gedcom Geo HP200LX Hints LEGO Logfile MIDI MP3 MPEG NetObj Neural Penguin Poetry Remedy Roman Router Silly Speech SyslogScan System2 Tasks Telephony Video WAIT Wais Watchdog 24_Commercial_Software_Interfaces: AltaVista HtDig MQSeries NexTrieve Openview P4 R3 Real SAP Tivoli
rfhpc8317% cat /tmp/getcat lynx -dump http://cpan.valueclick.com/modules/by-category/$1 \ | grep -v Apache/1.3.20 \ | cut -c7-30 \ | tail +6 \ | grep -v Parent.Dir \ | egrep -v -e ---- \ | sed -e 's,/ *$,,' -e 's/^ *//' \ | tr '\012' ' ' echo "" rfhpc8317% sh /tmp/getcat 03_Development_Support AutoSplit Benchmark Bleach ClearCase Conjury Continuus Coy Devel Exception ExtUtils FindBin Include Make Module Oak P4 Perf Perlbug Rcs Smirch Sub Test Usage VCS