Benutzer-Werkzeuge

Webseiten-Werkzeuge


perl

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
perl [2017-11-01 13:02:55] manfredperl [2017-11-01 13:03:49] (aktuell) – [lwp-request problem] manfred
Zeile 1: Zeile 1:
 +====== Perl ======
 +
 +__Auch selbst geschriebene Perl-Module müssen im Perl-Lib-Pfad abgelegt werden!__
 +
 +Die einkompilierten Perl-Lib-Pfade kann man so auslesen:
 +
 +hier ein Beispiel von Ubuntu 14.04:
 +  > perl -V | sed -ne '/@INC:/,/^$/p'
 +    @INC:
 +      /etc/perl
 +      /usr/local/lib/perl/5.18.2
 +      /usr/local/share/perl/5.18.2
 +      /usr/lib/perl5
 +      /usr/share/perl5
 +      /usr/lib/perl/5.18
 +      /usr/share/perl/5.18
 +      /usr/local/lib/site_perl
 +      .
 +
 +Dabei bietet sich das letzte Verzeichnis, zum ablegen eigener Module, geradezu an.
 +
 +===== Dateioperationen =====
 +
 +  * [[http://www-ik.fzk.de/~apel/html-Buch_2/tecj.htm]]
 +
 +
 +==== allgemein ====
 +
 +  #!/usr/bin/perl
 +  
 +  open(NEUIGKEITENDATEI, "<", "news.txt");               # Datei zum lesen öffnen
 +  print NEUIGKEITENDATEI "hier steht der Text\n";        # in die Datei schreiben
 +  close(NEUIGKEITENDATEI);                               # Datei schließen
 +  
 +  open(NEUIGKEITENDATEI, ">", "news.txt");               # Datei zum schreiben öffnen
 +  print NEUIGKEITENDATEI "hier steht der Text\n";        # in die Datei schreiben
 +  close(NEUIGKEITENDATEI);                               # Datei schließen
 +  
 +  open(NEUIGKEITENDATEI, ">>", "news.txt");              # Datei zum anhängenden schreiben öffnen
 +  print NEUIGKEITENDATEI "hier steht der Text\n";        # in die Datei schreiben
 +  close(NEUIGKEITENDATEI);                               # Datei schließen
 +  
 +  open(NEUIGKEITENDATEI, "+>", "news.txt");              # Datei zum lesen und schreiben öffnen
 +  print NEUIGKEITENDATEI "hier steht der Text\n";        # in die Datei schreiben
 +  close(NEUIGKEITENDATEI);                               # Datei schließen
 +  
 +  if(open(COUNTERDATEI, "<", "counter/counter.dat") == false)
 +   { print "Counter-Datei nicht gefunden\n"; }
 +  
 +  open(COUNTERDATEI, "<", "counter/counter.dat") || die "Counter-Datei nicht gefunden\n";
 +
 +Datei löschen:
 +  #!/usr/bin/perl
 +  
 +  use strict;
 +  use CGI::Carp qw(fatalsToBrowser);
 +  
 +  my $result = unlink ("news.txt");
 +  $result = unlink ("../news.txt");
 +  $result = unlink ("/tmp/news.txt");
 +
 +Datei verschieben:
 +  use File::Copy;
 +  move( "/tmp/news.txt", "./news.txt" ) or die "Das Verschieben ging nicht!: $!";
 +
 +
 +==== Datei zeilenweise einlesen ====
 +
 +  #!/usr/bin/perl
 +  
 +  @Zeilen = ("");
 +  open(MAILDAT, "<", "inbox.dat") || die "Datei mit E-Mails nicht gefunden\n";
 +  while(<MAILDAT>)
 +  {
 +      push(@Zeilen,$_);
 +  }
 +  close(MAILDAT);
 +  for(@Zeilen)
 +  {
 +      if(/HTML/)
 +      {
 +          print $_;
 +      }
 +  }
 +
 +
 +==== Datei zeichenweise einlesen ====
 +
 +  #!/usr/bin/perl
 +  
 +  @Vokale = ("a","e","i","o","u");
 +  @Anzahl = (0,0,0,0,0);
 +  open(DATEI, "<$ARGV[0]") || die "$_[1] nicht gefunden\n";
 +  while(($AktuellesZeichen = getc(DATEI)) ne "")
 +  {
 +      for($i=0;$i<=4;++$i)
 +      {
 +          if($AktuellesZeichen eq $Vokale[$i])
 +          {
 +              $Anzahl[$i]++;
 +          }
 +      }
 +  }
 +  close(DATEI);
 +  for($i=0;$i<=4;++$i)
 +  {
 +      print "$Vokale[$i] kommt in $ARGV[0] isg. $Anzahl[$i] mal vor\n";
 +  } 
 +
 +
 +==== in Datei schreiben ====
 +
 +  #!/usr/bin/perl
 +  
 +  $uebergabe = $ARGV[0];
 +  
 +  open(DATEI, ">", "/tmp/test.txt");
 +  print DATEI "Test 0001\n";
 +  print DATEI split(/\n/, $uebergabe),"\n";
 +  close(DATEI);
 +
 +
 +  #!/usr/bin/perl
 +  # Dieses Beispiel liest eine kommabegrenzte Datei mit Adressen ein
 +  # und schreibt sie HTML-formatiert in eine neue Datei
 +  
 +  @Adressen = ("");    # Speicher für alle Datensaetze
 +  @Datensatz = ("");   # Speicher für alle Felder des aktuellen Datensatzes
 +  $Felder = "";        # Speicher für die Namen der Felder (stehen in der ersten Dateizeile
 +  $i = 0;
 +  open(ADRESSEN, "<adressen.csv") || die "Adressendatei nicht gefunden\n";
 +  while(<ADRESSEN>                                     # Kommabegrenzte Datei einlesen
 +  {
 +  if($i == 0)                                            # erste Zeile der Datei einlesen
 +   {
 +    $Felder = $_;                                        # Feldnamen ermitteln
 +   }
 +  else
 +   {
 +    $Adressen[$i] = $_;                                  # ab zweiter Zeile in @Adressen einlesen
 +   }
 +  $i++;                                                  # Datensatzzähler erhöhen
 +  }
 +  close(ADRESSEN);
 +  $Anzahl = $i - 1;                                      # Anzahl Datensätze merken
 +  chop($Felder);
 +  @Datenfelder = split(/,/,$Felder);                     # Erste Zeile mit Feldnamen aufdröseln
 +  
 +  open(ADRESSENDAT, ">adressen.htm");                    # HTML-Datei zum Schreiben öffnen
 +  print ADRESSENDAT "<html>\n<head>\n";                  # HTML-Datei schreiben
 +  print ADRESSENDAT "<title>Adressen</title>\n";
 +  print ADRESSENDAT "</head>\n<body bgcolor=#FFFFFF>\n";
 +  for(@Adressen)                                         # solange Daten in der Adressenliste sind
 +  {
 +  @Datensatz = split(/,/,$_);                            # Aktuellen Datensatz aufdröseln
 +  $i = 0;
 +  for(@Datensatz)
 +    {
 +    print ADRESSENDAT "<b>$Datenfelder[$i]:</b> $Datensatz[$i]<br>\n";   # Aktuellen Datensatz schreiben
 +    $i++;
 +    }
 +  }
 +  print ADRESSENDAT "</body>\n</html>\n";
 +  close(ADRESSENDAT);
 +  print $Anzahl," Datensaetze geschrieben\n";            # Nur zur Kontrolle: auf Standardausgabe
 +
 +
 +===== Beispielschnipsel =====
 +
 +
 +==== STDIN ====
 +
 +
 +=== simpel ===
 +
 +  while(<STDIN>) {
 +          print $_;
 +  }
 +
 +
 +=== stdin2syslogd ===
 +
 +  #!/usr/bin/perl -w
 +  use Sys::Syslog;
 +  use IO::Handle;
 +  $ident="@ARGV";                 # Prozessname: "logger -t"
 +  $logopt="pid,cons";             # pid,ndelay,cons,nowait
 +  $facility="local7.notice";      # Facility: "logger -p"
 +  openlog $ident, $logopt, $facility;
 +  $io = new IO::Handle;
 +  if ($io->fdopen(fileno(STDIN),"r")) {
 +          $daten = $io->getline;
 +          $io->close;
 +          $counter++;
 +          syslog ($facility, "%d: $daten", $counter);
 +  }
 +  closelog;
 +
 +Beispielaufruf:
 +  # echo "Das ist ein Test: test0002" | /usr/local/bin/logger.pl Test_Tag
 +
 +
 +===== lwp-request =====
 +
 +
 +==== lwp-request problem ====
 +
 +  > lwp-request https://hostname.domain.de/test.html
 +  Can't connect to hostname.domain.de (certificate verify failed)
 +  
 +  LWP::Protocol::https::Socket: SSL connect attempt failed with unknown error error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed at /usr/share/perl5/LWP/Protocol/http.pm line 41.
 +
 +Manchmal möchte man (auch wenn es unsicher ist) die SSL-Überprüfung abschalten.
 +
 +
 +=== Lösung: Ubuntu 12.04 ===
 +
 +In Ubuntu 12.04 muss die Datei ''/usr/bin/lwp-request'' bearbeitet werden (Überprüfung des Hostnamens abschalten => "1" gegen "0" tauschen).
 +          $ENV{'PERL_LWP_SSL_VERIFY_HOSTNAME'} = 0;
 +
 +
 +=== Lösung: Ubuntu 14.04 ===
 +
 +In der Version 6.05 vom Paket libwww-perl (Ubuntu 14.04), muss die Datei ''/usr/share/perl5/LWP/UserAgent.pm'' bearbeitet werden (Überprüfung des Hostnamens abschalten => "1" gegen "0" tauschen).
 +              $ssl_opts->{verify_hostname} = 0;
 +
 +
 +=== Lösung: Ubuntu 16.04 ===
 +
 +In der Version 6.15 vom Paket libwww-perl (Ubuntu 16.04), muss die Datei ''/usr/share/perl5/LWP/Protocol/https.pm'' bearbeitet werden (SSL-Überprüfung abschalten => "1" gegen "0" tauschen).
 +          $ssl_opts{SSL_verify_mode} ||= 0;
 +