Benutzer-Werkzeuge

Webseiten-Werkzeuge


perl

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

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;
/home/http/wiki/data/pages/perl.txt · Zuletzt geändert: von manfred