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.
#!/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!: $!";
#!/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 $_;
}
}
#!/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";
}
#!/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
while(<STDIN>) {
print $_;
}
#!/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 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.
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;
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;
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;