Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2
open() öffnen
-|- oder -|close() schließenprint, <FH> usw.<>
$ARGV$.$/eofsysopen() öffnen
O_CREAT und umask()O_*-Konstantenread()sysread()IO::Selectprint(), printf(), write()syswrite()format und writeopendir(), readdir() und closedir()
opendir() öffnenreaddir()closedir() wieder schließenrewinddir(), telldir() und seekdir()mkdir() erzeugenrmdir() löschenrm -rf * rekursiv löschenstat()-Funktionunlink()rmrename()mvFile::CopycpcatFile::CopycmpFile::Comparediffseek() und tell()sysseek() und systellDB_Fileflock()fcntl()truncate() verkürzenDATAIO::HandleIO::File
print STDOUT "Standardoutput\n"; # Normale Ausgaben
print STDERR "Error messages...\n"; # Fehlerkanal
$input = <STDIN>; # Benutzereingaben
open(IFH, "< infile") or die "can't open: $!\n";
open(OFH, "> overwrite.me") or die "...: $!\n";
open(AFH, ">> appendto.me") or die "...: $!\n";
open(TOPROG, "| pietome.program") or die "...: $!\n";
open(FROMPG, "readfromme.prog |") or die "...: $!\n";
print FH "Some output\n";
$line = <FH>; @remlines = <FH>; chomp $line; chomp @remlines;
close(FH) or die "Error while close()ing: $!\n";
{ local $/; $allfile = <FH>; } # Schlürfmodus
{ local $/ = ''; $paragraph = <FH>; } # Absatz-Modus
while (<FH>) { print "$.: $_\n"; } # Zeilennummer
# Defaulthandle ändern und Pufferung ausschalten
$ofh = select(FH); # Defaulthandle ändern
$| = 1; # Pufferung auf FH aus!
print "Hehe, this goes to FH!\n";
select($ofh); # Alter Defaulthandle, Pufferung von FH aus!
sub myfunc { local *FH = shift; print FH "okay\n"; }
myfunc(*STDOUT);
sub retfh { local *FH; open(FH, '...'); return *FH; }
*fh = retfh(); print fh "okay\n";
while (<>) { # Spitzeklammernoperator (Diamond-Operator)
# Nächste Zeile aller Kommandozeilendateien
# Aktuelle Datei: $ARGV
}
# Systemnahe Ein-/Ausgage
use Fcntl;
sysopen(FH, $fname, O_RDWR | O_CREAT, 0666) or die "...: $!\n";
$nbytes = read(FH, $buf, $wanted, $offset);
$nbytes = sysread(FH, $buf, $wanted, $offset);
$nbytes = syswrite(FH, $buf, $wanted, $offset);
# Report-Generator
write; # Vorher Variablen vorbelegen
format STDOUT_TOP =
Page
$%
.
format STDOUT =
@<<<<<< @<<<<<< @||||||| @####.##
$field1, $field2, $field3, $sum
.
# Das Dateisystem
@cfiles = <*.c>; # Fileglob
opendir(DIR, $path) or die "...: $!\n";
# Skalarer Zugriff
while (defined ($file = readdir(DIR))) { ... }
# oder Listenzugriff
@files = readdir(DIR);
closedir(DIR);
mkdir('/tmp/newdir', 0777) or die "...: $!\n";
rmdir('/tmp/emptydir') or die "...: $!\n";
link($oldname, $newhardlink);
symlink($oldname, $newsymlink);
$followed = readlink($symlink);
# Dateitestoperatoren
print "File exists\n" if -e $fname;
-r -w -x -o -R -W -X -O -e -z -s -u -g -k -T -B
-f -d -l -p -S -b -c -t -M -A -C
($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
$atime, $mtime, $ctime, $blksize, $blocks) = stat(FH);
unlink($fname) or die "...: $!\n"; # Datei löschen
rename($old, $new); # Umbenennen: =FS
# Temporäre Dateien
use IO::File;
$fh = IO::File->new_tmpfile or die "...: $!\n";
# Direkter Zugriff
seek(FH, $offset, SEEK_SET); # SEEK_CUR, SEEK_END
$pos = tell(FH);
# Dateisperren
use Fcntl qw(:DEFAULT :flock);
flock(FH, LOCK_EX); flock(FH, LOCK_EX | LOCK_NB); # Schreiben
flock(FH, LOCK_SH); flock(FH, LOCK_SH | LOCK_NB); # Lesen
flock(FH, LOCK_UN); # Sperre wieder aufheben
self-output.pl |
Selbstgespräche, Ausgabefilter |
self-input.pl |
Selbstgespräche, Eingabefilter |
wrapmyprog.sh |
Verschlüsselungswrapper mit IDEA |
fortune.pl |
Wählt zufälligen Fortune-Satz aus |
FileCache-example.pl |
Ermöglicht mehr offene Dateien als das System erlaubt |
umask-demo.pl |
Zeigt die Verwendung der umask |
form-demo.pl |
Report-Generator mit Formaten und write() |
cloaked.pl |
Zeigt die Namen von unsichtbaren .Dateien an |
file-kglob.pl |
Zeigt die Verwendung des File::KGlob-CPAN-Moduls |
subdirs.pl |
Unterverzeichnisse (1. Ebene) anzeigen |
traverse-dir-manual.pl |
Rekursives Durchlaufen eines Directory |
traverse-dir-module.pl |
Rekursives Traversieren mit File::Find |
ls.pl |
Mini-ls(1) mit Dateitestoperatoren |
statme.pl |
Zeigt alle stat()-Informationen einer Dateiliste an |
makehole.pl |
Erzeugt eine Datei mit einem Loch |
showsize.pl |
Größe einer Datei mit File::stat stat() abfragen |
touch.pl |
Aktualisiert die Zugriffszeit auf Dateien |
wipe.pl |
Überschreibt Dateien vor dem 'physischen' Löschen |
rename |
Larry's filename fixer |
cisco-static-routes.pl |
Erzeugt bzw. entfernt statische Routen |
tempfile-io.pl |
Temporäre Datei anlegen, ohne den Namen zu kennen |
tempfile-tmpnam.pl |
Temporäre Datei mit bekanntem Namen |
dbfile-lines.pl |
Zeilenweises Editieren einer Textdatei |
parallel-file.pl |
Konkurrierender Zugriff auf eine Datei |
reverse-self.pl |
a program that prints itself |
$oldvalue = $h{$akey}; # FETCH() mit Lesesperre.
# Lesesperre wird wieder aufgehoben
# Hier potentielle Race-Condition!
$h{$akey} = $newvalue; # STORE() mit Schreibsperre.
# Schreibsperre wird wieder aufgehoben.
In diesem Fall wurde ein Wert, lesesperrengeschützt in den Speicher gelesen. Anschließend wird ein evtl. neuer Wert wieder zurückgeschrieben. Inzwischen könnte ein anderer Prozeß ebenfalls den Wert einlesen, verändern und zurückspeichern, bevor der erste Prozeß seinen Wert zurückschreibt. Die Änderung des zweiten Prozeß wären dann verloren. (2000/02/04)
In Vorbereitung
In Vorbereitung
$"!$! durch $!. (Ein " zuviel)O_WRONLY | O_SYNC | O_CREAT,...sysopen() sind durch Mögliche Fehlerursachen bei opendir() sind.find-Befehl abschließt, entwertet werden.rename 's/\.bak$//' *.c.bak
uc() in Großbuchstaben konvertiert. ...readline durch readdir.
opendir (DIR, '/usr/include') or die "can't open dir: $!\n";
while (defined ($file = readdir(DIR))) {
if (-d $file) { ... } # FALSCH!
# ...
}
while (defined ($file=readdir(DIR))) {
my $fname = "$path/$file"; # Unix-Style
# Tue etwas mit $fname
}
[Alte Quelle]
| Last modified: $Date: 2006/05/18 12:55:44 $ FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy |
|