9. Practical Extraction and Report Language - perl

Inhalt:

9.1 Überblick

  1. Kurzer Überblick, Umfang:

    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).

  2. Roadmap to Documentation:

    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

  3. Aufruf:

    perl -e '...' (vgl. sh -c)
    perl meinscript
    ./script mit erster Zeile "#!/soft/bin/perl" + "chmod +x"

9.2 Links

9.3 Datentypen

Beispiele:
     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 ...)

9.4 Ein-/Ausgabe

9.5 Kontrollstrukturen

9.6 Musterverarbeitung

9.7 Arrays, Listen und Stacks

  1. In perl sind Arrays dasselbe wie Listen und Stacks, je nach Anwendungsgebiet stehen verschiedene Zugriffsverfahren bereit.

  2. Arrays:

  3. Listen:

  4. Stacks:

9.8 Hashes

9.9 Eingebaute Funktionen - eine Auswahl

Vgl. perlfunc(1), perldoc -f

  1. String- und Listen-Funktionen:
    $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);
    
         
  2. Dateioperationen:
    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);
         
  3. Prozesssteuerung:
    $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);     
  4. Netzwerk-IO (vgl. perlipc(1)):
    socket(SOCKET, DOMAIN, TYPE, PROTOCOL);
    
    connect(SOCKET, NAME);
    
    bind(SOCKET, NAME);
    
    listen(SOCKET, $queuesize);
    
    accept(NEWSOCKET, GENERICSOCKET);
    
    $peer = getpeername(SOCKET);
         
  5. Netzwerk-, User- und Gruppen-Informationen (perldoc -f getpwnam):
    
    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* 

9.10 Unterprogramme

Definition mit "sub name { ... }", Aufruf mit "name(...)". Parameteruebergabe in "@_".

Beispiel 1:

Beispiel 2:

Achtung! Per default sind Variablen global, um sie als lokal zu deklarieren muss dies explizit angegeben werden:

9.11 Referenzen

9.12 Module

Literatur

(Uebung)
(c) Copyright 1998-2007 Hubert Feyrer <hubert@feyrer.de>
$Id: 09-perl.html,v 1.24 2007/07/02 21:44:44 feyrer Exp $