/blog/perl


substr() in Perl
[154287 mal gelesen]
foreach in Perl
[129187 mal gelesen]
Arrays in Perl - Besonderheiten
[125445 mal gelesen]
split() in Perl - Zeichenketten teilen
[113659 mal gelesen]
open() - Dateien öffnen in Perl
[109015 mal gelesen]
grep - Listen durchsuchen in Perl
[94773 mal gelesen]
chomp() in Perl
[93659 mal gelesen]
push in Perl
[90875 mal gelesen]
sleep in Perl - Das aktuelle Script warten lassen
[76007 mal gelesen]
index() in Perl - Zeichenkette in Zeichenkette suchen
[59612 mal gelesen]


Arrays
Dateien
HTPC
Hashes
Leistungsoptimiert
PHP
Perl
RegEx
Schleifen
Script
Skalare
Sonstiges
System
Webserver
Zur Startseite


28.4.2007

Hash of Arrays - Oder: Wie bilde ich ein Hash aus Arrays


Nachdem ich hier das Thema schonmal aufgegriffen habe (etwas versteckt vielleicht), möchte ich das Thema nochmal aufgreifen: Hash of Arrays, also ein Hash, der Arrays enthält.Hört sich nun etwas verquert an, ist aber ne schöne und effektive Sache, wenn man viele Daten im Systemspeicher verwalten will.

Anlegen kann man so ein Array in einem Hash wie gewohnt per push(), also zum Beispiel

push (@{$hashname{$bezeichner}},$wert);
# oder per Wertzuweisung
@{$hashname{$bezeichner}}=@array;


Weiterlesen...


Der Beitrag "Hash of Arrays - Oder: Wie bilde ich ein Hash aus Arrays? " wurde 37195 mal gelesen.

Kompletten Beitrag lesen Nach oben



27.4.2007

Speedtest File::Find


Wie ich hier ja schon berichtet habe, schien mit das Modul File::Find zu der Zeit etwas unflexibel.Grund dafür war die Tatsache, daß ich keine Dateiendungen übergeben konnte bzw. nicht festlegen konnte, wie viele Ebenen durchsucht werden sollen bzw. nur die aktuelle Ebene oder inklusive Unterebene.

Dies ist zwar natürlich Möglich, aber leider nur per Umweg.
Der Aufruf von File::Find erfolgt ja per
Weiterlesen...


Der Beitrag "Speedtest File::Find" wurde 11202 mal gelesen.

Kompletten Beitrag lesen Nach oben



26.4.2007

Identische Dateien finden - Der Holzweg



Zum ursprünglichen Beitrag
Hier also der Code, der mich nicht weiter brachte.

use Digest::MD5 qw(md5);
use strict;


my %files=();
my %dateien;
my @nulllength=();
my @dateisize=();
my @dateien=get_all_files('c:/htdocs/',1,'.shtml');

print "Es wurden ".@dateien." Dateien gefunden\n";

## Dateilänge holen und merken
foreach (@dateien){
open (my $IN,'<'.$_);
my $dateilaenge=(stat($_))[7];

binmode ($IN);
read ($IN,my $key,100);
close $IN;

my $size="$dateilaenge|$key";

# Ist Hash-Element der Dateigröße schon vorhanden???
# Wenn nicht, dann Array anlegen, erster Wert ist die Dateigröße
# Übrigens : Hier kann man die Verwendung eines Hashes mit (aus?) Arrays sehen
push (@{$dateien{$size}},"$size") if (!defined @{$dateien{$size}});
push (@{$dateien{$size}},$_);
}

# Ab hir steht in [filename,filename,filename]
# jede Datei, aufgetielt nach Dateigroessen

@dateien=();
foreach (keys %dateien){
my @dats=@{$dateien{$_}};
# wenigstens 2 Filenamen müssen da sein, also @dats >= 3, da erster Eintrag die Dateilaenge
next if @dats < 3;

&get_checksum(@dats);
}
%dateien=();

print qq~Dateien mit Nulllaenge:\n~;
print join("\n",@nulllength);

print qq~\n\nIdentische Dateien:\n~;

foreach (keys %files){
print "$files{$_}\n\n" if (split('\n',$files{$_}) >1);
}


exit;

###################
# Parameter
# Startdir ohne abschließendes /, aktuelles Verzeichnis = .
# Unterverzeichnisse durchsuchen? 1: ja, 0: nein
# Dateitypen in form .txt.htm.html , also direkt hintereinander, aber nur wenn nötig
# ansonsten wird alles gezeigt
#############################################
sub get_all_files{
my $startdir=shift;
my $include_subdirs=shift;
my $endings=shift;
my %endings=();
$endings=~ s/\s//g;
my @endings=split('\.',$endings);
shift @endings;

my $endings=0;
$startdir=~ s/\/$//;

if (@endings != 0){
$endings=1; # wenn Endungen angegeben
foreach (@endings){
$endings{$_}=1;
}
}
@endings=();

my @dateien=();
push (my @all_directories,$startdir);

foreach my $akdir(@all_directories){
local *in;
opendir (in,$akdir);
my @all=readdir(in);
closedir in;

foreach my $akdatei (@all){ next if ($akdatei eq '..' || $akdatei eq '.');
if (-d "$akdir/$akdatei") {
if ($include_subdirs == 1){
push (@all_directories,"$akdir/$akdatei");
next;
}
} else {
if ($endings==0){
push (@dateien,"$akdir/$akdatei");
} else {
my @endung=split('\.',$akdatei);
my $endung=$endung[-1];
if ($endings{$endung} == 1){
push (@dateien,"$akdir/$akdatei");
}
}
}
}
}
return @dateien;
}




######################
# generiert Checksumme einer Datei
#############################################
sub get_checksum{
my ($dateiname,$dateilaenge);
my %tempfiles=(); # temporäre Files
my $data='';

$dateilaenge=shift;
($dateilaenge,my $dummy)=split('\|',$dateilaenge);

return if $dateilaenge > 64000000;

if ($dateilaenge == 0){ # Wenn Dateilaenge = 0, dann gleich alles ins Array und zurück
push (@nulllength,@_);
return;
}

my $firsthundret='';

foreach $dateiname (@_){

open (my $IN,'<'.$dateiname);
binmode($IN);

my $checksum = Digest::MD5->new->addfile(*$IN)->digest;
close $IN;

$files{$checksum}.="$dateiname\n";
}
}





Der Beitrag "Identische Dateien finden - Der Holzweg" wurde 8478 mal gelesen.

Kompletten Beitrag lesen Nach oben



25.4.2007

Identische Dateien auf dem Computer finden mit Perl


Vor kurzem stand ich vor dem Problem, daß auf einem von mir betreuten Webserver der Speicherplatz aufgebraucht war.
Nach etwas herumsuchen stellte ich dann fest, daß es daran lag, daß viel Speicherplatz verschleudert wurde, weil viele identische Dateien mehrmals vorhanden waren.

Was lag also näher, als ein kleines Perl-Programm zu schreiben, das doppelte (identische) Dateien findet?

Weiterlesen...


Der Beitrag "Identische Dateien auf dem Computer finden mit Perl" wurde 10606 mal gelesen.

Kompletten Beitrag lesen Nach oben



18.4.2007

stat - Eigenschaften von Dateien ermitteln


Die Funktion stat() ermittelt diverse Eigenschaften einer Datei auf einmal.
Viele dieser Eigenchaften sind jedoch Unix-spezifisch. Manche dieser Eigenschaften lassen sich zwar auch auf anderen Plattformen erfragen, meist ist es jedoch einfacher, die Dateitestoperatoren für Dateien/Verzeichnisse zu verwenden.
Die Funktion stat läßt sich im Gegensatz zu lstat nicht auf Dateirepräsentationen, sondern nur auf "Originale" von Dateien anwenden.

Syntax
@Eigenschaften=stat(Datei);
Weiterlesen...


Der Beitrag "stat - Eigenschaften von Dateien ermitteln " wurde 20114 mal gelesen.

Kompletten Beitrag lesen Nach oben



17.4.2007

unlink() - Dateien löschen in Perl


Der Befehl unlink() löscht eine oder mehrere Dateien.

Syntax
$result = unlink ( Dateiename );

oder
Weiterlesen...


Der Beitrag "unlink() - Dateien löschen in Perl " wurde 35213 mal gelesen.

Kompletten Beitrag lesen Nach oben



14.4.2007

rename - Dateien und Verzeichnis umbenennen


Mit dem Befehl rename können Sie Dateien und Verzeichnisse umbenennen.
Der Syntax von rename lautet
rename (Altername, Neuername);

Altername gibt die Datei oder das Verzeichnis an, das geändert werden soll, Neuername ist der neue Verzeichnis- bzw. Dateiname.
Vorsicht
Wenn der erste Parameter eine Datei ist und der zweite Parameter der Name eines anderen Verzeichnisses, wird die Datei in das andere Verzeichnis verschoben.
Weiterlesen...


Der Beitrag "rename - Dateien und Verzeichnis umbenennen" wurde 31895 mal gelesen.

Kompletten Beitrag lesen Nach oben



13.4.2007

Links finden - die Fortsetzung


Nachdem ich hier ja schon über meine "Feldversuche" bezüglich dem Finden von Links auf Webseiten berichtet habe, scheine ich nun schon recht weit gekommen zu sein.
Wer will kann sich ja mal die Ergebnisse ansehen und ein bißchen herumtesten.
Zum Linkchecker bitte hier klicken.


Der Beitrag "Links finden - Links testen - Backlink überwachen" wurde 7733 mal gelesen.

Kompletten Beitrag lesen Nach oben



13.4.2007

rmdir - Ein Verzeichnis löschen mit Perl


Mit rmdir kann man unter Perl ein Verzeichnis löschen. Dazu muß dieses Verzeichnis allerdings vollkommen leer sein, es dürfen auch keine weiteren, leeren, Unterverzeichnisse enthalten sein.

Syntax
rmdir (Verzeichnis);

Wurde das Löschen erfolgreich durchgeführt, wird ein true zurückgegeben, andernfalls ein false. Zusätzlich findet man dann in $! eine Fehlermeldung im Textformat.
Weiterlesen...


Der Beitrag "rmdir - Ein Verzeichnis löschen mit Perl" wurde 13730 mal gelesen.

Kompletten Beitrag lesen Nach oben



12.4.2007

chdir - Aktuelles Arbeitsverzeichnis definieren


Mit dem Befehl chdir legen Sie ein Verzeichnis als Arbeitsverzeichnis fest. Das bedeutet, daß man, ohne sich um den Verzeichnispfasd kümmern zu müssen, Dateien bearbeiten oder Scripte starten kann, die in diesem Verzeichnis liegen.

Syntax
chdir($pfad);

Der Pfadname kann dabei relativ oder absolut verwendet werden. Außerdem ist es auch möglich, daß kein Pfadname angegeben wird. Dann wird das Verzeichnis verwendet, das in der Umgebungsvariablen HOME angegeben ist.
Weiterlesen...


Der Beitrag "chdir - Aktuelles Arbeitsverzeichnis definieren" wurde 9846 mal gelesen.

Kompletten Beitrag lesen Nach oben



11.4.2007

Skalar durchsuchen und gefundene Ergebnisse in Array schreiben


Mal wieder etwas aus der Praxis:
Ich stand (stehe) vor dem Problem, daß ich ein Skalar, oder genauer gesagt dem HTML-Quelltext einer Webseite nach Links durchsuchen mußte.
Ich suchte also eine Möglichkeit, möglichst schnell alle Links nach dem Schema
<a href="test.htm" .....>Linktext</a>
zu finden und wenns denn geht gleich in ein Array zu schubsen.

Weiterlesen...


Der Beitrag "Skalar durchsuchen und gefundene Ergebnisse in Array schreiben" wurde 10242 mal gelesen.

Kompletten Beitrag lesen Nach oben



11.4.2007

Dateitestoperatoren - Eigenschaften von Verzeichnissen und Dateien feststellen


Die so genannten Dateitestoperatoren sind die schnellste und einfachste Methode in Perl, Eigenschaften von Dateien oder Verzeichnissen herauszufinden.
Manche Operatoren geben dabei nur true oder false zurück, andere wiederum Zahlen, etwa die Größe einer Datei.

Den Dateitestoperatoren wird ein - vorangestellt, danach folgt der Verzeichnis- bzw. Dateiname. Also zum Beispiel:

$size=-s 'dateiname.txt';
print $size;


Weiterlesen...


Der Beitrag "Dateitestoperatoren - Eigenschaften von Verzeichnissen und Dateien feststellen" wurde 11666 mal gelesen.

Kompletten Beitrag lesen Nach oben



10.4.2007

Cookies mit Perl


Will man einen User genau identifizieren, kann man neben der IP-adresse zusätzlich ein so genanntes Cookie verwenden.
Cookies, zu deutsch Kekse oder Plätzchen, enthalten neben dem eigenen Identifier noch einen beliebigen Wert, ein Verfallsdatum und (wenn gewünscht) einen Pfad auf dem Webserver, für den sie gültig sind.
Cookies werden von Browser gespeichert und senden bei jedem erneuten Aufruf ihre Daten an den Webserver, der daran erkennen kann, wer die Anfrage gesendet hat.
Cookie-Daten werden übrigens meist (oder immer?) unverschlüsselt abgespeichert, deshalb bitte keine kritischen Daten damit übertragen!

Weiterlesen...


Der Beitrag "Cookies mit Perl" wurde 7350 mal gelesen.

Kompletten Beitrag lesen Nach oben



9.4.2007

grep - Listen durchsuchen in Perl


Syntax
grep {BLOCK} ARRAY;
oder
grep (EXPR, ARRAY); bzw. grep EXPR,ARRAY;

Der Befehl grep ist ein sehr mächtiger und universeller Befehl, mit dem sich bestimmte Einträge in Arrays finden lassen.
Weiterlesen...


Der Beitrag "grep - Listen durchsuchen in Perl" wurde 94773 mal gelesen.

Kompletten Beitrag lesen Nach oben



8.4.2007

rewinddir - Zeiger wieder auf den ersten Verzeichniseintrag setzen


Mit dem Befehl rewinddir() wird der Lesezeiger eines Directory-Handles wieder auf den Anfang gesetzt.
Man kann den Befehl dazu verwenden, wenn ein bereits (teilweise) eingelesenes Verzeichnis erneut eingelesen werden soll.

Syntax
rewinddir(DIR);

Weiterlesen...


Der Beitrag "rewinddir - Zeiger wieder auf den ersten Verzeichniseintrag setzen" wurde 6931 mal gelesen.

Kompletten Beitrag lesen Nach oben



7.4.2007

seek() - Dateizeiger neu positionieren



Syntax
seek(HANDLE,Positionswert,ABSOLUT-RELATIV-VOMENDE);

Der Befehl seek setzt den Dateizeiger eines Dateihandles, das vorher mit open erzeugt wurde, an eine neue, beliebige Stelle.
Dazu werden folgende Parameter verwendet:
Weiterlesen...


Der Beitrag "seek() - Dateizeiger neu positionieren" wurde 15954 mal gelesen.

Kompletten Beitrag lesen Nach oben



6.4.2007

tell - Die Position eines Dateizeigers ermitteln


Der Befehl tell() ermittelt die aktuelle Position eines Dateizeigers, der vorher mit open erzeugt wurde.

Syntax
$position=tell(HANDLE);

$position ist die aktuelle Byteposition. Wenn ein Fehler aufgetreten ist, wird ein -1 zurückgegeben.
Weiterlesen...


Der Beitrag "tell - Die Position eines Dateizeigers ermitteln" wurde 8209 mal gelesen.

Kompletten Beitrag lesen Nach oben



5.4.2007

Nochmal Dateien suchen - diesmal auch in Unterverzeichnissen


Ich hab ja hier schon ein Script vorgestellt, mit dem man bestimmte Dateien in einem Verzeichnis suchen kann.Und weil ich es grad aktuell gebraucht habe, hier eine Funktion, mit der man bestimmte oder auch alle Dateien in einem Ordner inklusive Unterordner suchen kann.

Aber Vorsicht
Wenn man die ganze Platte durchsuchen läßt, kann das schon mal länger dauern...


use strict;

my @dateien=get_all_files('../..',1,'.pl');

print join("\n",@dateien);

###################
# Parameter
# Startdir ohne abschließendes /, aktuelles Verzeichnis = .
# Unterverzeichnisse durchsuchen? 1: ja, 0: nein
# Dateitypen in form .txt.htm.html , also direkt hintereinander, aber nur wenn nötig
# ansonsten wird alles gezeigt
#############################################
sub get_all_files{
my $startdir=shift;
my $include_subdirs=shift;
my $endings=shift;
my %endings=();
$endings=~ s/\s//g;
my @endings=split('\.',$endings);
shift @endings;

my $endings=0;
$startdir=~ s/\/$//;

if (@endings != 0){
$endings=1; # wenn Endungen angegeben
foreach (@endings){$endings{$_}=1;}
}
@endings=();

my @dateien=();
push (my @all_directories,$startdir);

foreach my $akdir(@all_directories){
local *in;
opendir (in,$akdir);
my @all=readdir(in);
closedir in;

foreach my $akdatei (@all){ next if ($akdatei eq '..' || $akdatei eq '.');
if (-d "$akdir/$akdatei") {
if ($include_subdirs == 1){
push (@all_directories,"$akdir/$akdatei");
next;
}
} else {
if ($endings==0){
push (@dateien,"$akdir/$akdatei");
} else {
my @endung=split('\.',$akdatei);
my $endung=$endung[-1];
if ($endings{$endung} == 1){
push (@dateien,"$akdir/$akdatei");
}
}
}
}
}
return @dateien;
}


Weiterlesen...


Der Beitrag "Nochmal Dateien suchen - diesmal auch in Unterverzeichnissen" wurde 15201 mal gelesen.

Kompletten Beitrag lesen Nach oben



4.4.2007

closedir - Verzeichnis schließen


Schließt das Handle eines Verzeichnisses, das vorher mit opendir geöffnet wurde.

Syntax
opendir(verzeichnis);


opendir(my $DIR,'../') || die "Kann Verzeichnis nicht öffnen: $!";
foreach (my $eintrag=readdir($DIR)){
print "$_\n";
}
closedir ($DIR);


Weiterlesen...


Der Beitrag "closedir - Verzeichnis schließen" wurde 7303 mal gelesen.

Kompletten Beitrag lesen Nach oben



3.4.2007

getc - Nächstes Zeichen aus Datei lesen


Der Befehl getc() Liest ein Zeichen aus einer zuvor geöffneten Datei und positioniert den Dateizeiger um ein Zeichen weiter.
getc ist die Abkürzung für get Char(akter), zu deutsch hole (ein) Zeichen.

Syntax
$zeichen=getc(HANDLE);

open (my $IN,'<datei.txt') || die "kann datei nicht oeffnen: $!";
while ( !eof($IN) ){
my $zeichen = getc($IN);
print $zeichen;
}
close $IN;


Weiterlesen...


Der Beitrag "getc - Nächstes Zeichen aus Datei lesen" wurde 12592 mal gelesen.

Kompletten Beitrag lesen Nach oben



2.4.2007

read() - Bestimmte Anzahl Zeichen aus Datei einlesen


Mit dem Befehl read() können eine bestimmte Anzahl von Zeichen aus einer Datei ab dem aktuellen Datei-Positions-Zeiger eingelesen werden.

Syntax
$gelesen=read(DATEIHANDLE,Skalar,Anzahl(,optional: Offset))

Im Erfolgsfall wird die Anzahl der gelesenen Zeichen zurückgegeben, ansonsten eine 0 bei Dateiende und ein undef bei einem Fehler.
Weiterlesen...


Der Beitrag "read() - Bestimmte Anzahl Zeichen aus Datei einlesen" wurde 13843 mal gelesen.

Kompletten Beitrag lesen Nach oben



1.4.2007

close - Datei schließen in Perl


Mit close () schließen Sie eine Datei, die Sie zuvor mit open geöffnet haben.

Syntax
close(FILEHANDLE);


open(my $IN,'<'.$datei);
#tu was
close ($IN);


Weiterlesen...


Der Beitrag "close - Datei schließen in Perl" wurde 15492 mal gelesen.

Kompletten Beitrag lesen Nach oben




SSD-Festplatte - Wassn das???
Die Transliteration - Nur ein Zeichen in einem Skalar ersetzen
Select - Case in Perl
Windows 7 XP Mode – Wo finde ich den XP-Modus unter Windows 7?
Mac-Adresse beim Apple Macintosh herausfinden
SGN-Funktion für Perl

Eigene IP herausfinden mit Perl
Epoche live in Datum umwandeln
Firefox 3 - Exe-Files downloaden


Gesamtverzeichnis
Februar 2010
Dezember 2009
Oktober 2009
Januar 2009
Dezember 2008
November 2008
September 2008
August 2008
Juli 2008
Juni 2008
Mai 2008
April 2008
Januar 2008
Dezember 2007
November 2007
Oktober 2007
September 2007
August 2007
Juni 2007
Mai 2007
April 2007
März 2007
Februar 2007
Januar 2007
Dezember 2006


Mister Wong

RSS-Feed

Heute ist der
12.12.2024

Es ist
15:04:20 Uhr

Ihre IP:
18.97.9.172

Blog-Einträge: 186

Die letzten 24 Stunden im Überblick


Gelesene Beiträge insgesamt:
4426886


Webseiten vergleichen
Kalender mit Feiertagen - 2028
Links finden und testen
Menschliche Datumsangaben
IP zu Domain herausfinden
Time live in Datum umwandeln
Perl für Windows



Impressum