www.farid-hajji.net banner

Farid Hajji

Perl: Einführung, Anwendungen, Referenz (2/e) [Support-Site]

Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2

Kapitel 13: Referenzen

Inhalt
Synopsis
use strict 'refs';           # Verbiete symbolische Referenzen
no  strict 'refs';           # Erlaube symrefs wieder

# Der Backslash-Operator erzeugt benannte Referenzen
\$scalvar, \@array, \%hash, \&function, \*FH, \substr(), \$ptr, \\var
# Die *foo{THING}-Syntax, anstelle des Backslash-Operators
*foo{SCALAR}, *foo{ARRAY}, *foo{HASH}, *foo{CODE}, *foo{IO}, *foo{GLOB}
# Referenzen auf anonyme Strukturen sind auch möglich
$listptr = [ $var1, "hello", @alist ];
$hashptr = { I => 1, II => 2, III => 3, IV => 4, V => 5 };
$funcptr = sub { print "hello, this is an anon. subroutine\n" };

# Dereferenzierung von Zeigern mit der Blocknotation
${$s_ptr} = "new value";      # Verändert, worauf $s_ptr zeigte
push(@{$a_ptr}, @morevalues); # Ergänzt eine Liste
foreach my $key ( keys %{$h_ptr} ) { ... }
${ gimme_a_ptr($something) } = "this is new";  # Ausdrücke okay

# Dereferenzierung von Zeigern mit dem Pfeiloperator
$a_ptr->[42] = "The answer to all questions";
print $h_ptr->{'PHONE'};        # 555-2311
@resultlist = $f_ptr->($arg1, $arg2, $arg3);

# Typ einer Referenz erkennen
$type = ref($ptr); # SCALAR, ARRAY, HASH, CODE, GLOB, REF, LVALUE
                   # oder Name der Klasse des Objekts $ptr
                   # oder falsch, falls $ptr keine Referenz war

# Komplexe Strukturen
@LoL = ( [ $x11,$x12,$x13 ], [ $x21,$x22,$x23 ], [ $x31,$x32,$x33 ] );
$pivot = $LoL[1][1];
$prof->{'NAME'} = $name; $prof->{'PHONE'} = $phone;
use Data::Dumper; print Dumper(\@LoL, \$prof);

# Die Schwartzsche Transformation
@sorted = map  { $_->[0] }               # 4. Extrahieren
          sort { $a->[1] <=> $b->[1] }   # 3. Sortierung
          map  { [ $_, slowfunc($_) ] }  # 2. Werte vorberechnen
          @nonsorted;                    # 1. Was sortiert wird
# Schlüssel können normalerweise keine Referenzen sein
use Tie::RefHash;
tie %h, 'Tie::RefHash' or die "can't tie: $!\n";
$h{ $ptr } = "some value";
$h{ [ "this", "is", "an", "anonymous", "list" ] } = time();
@refs = keys %h;

# Kopieren komplexer Datenstrukturen
@dstLOL = @oldLoL;             # VORSICHT: Shallow Copy
use Storable qw(dclone);
@copyLoL = dclone(\@oldLoL);   # Deep Copy

# Symbolische Referenzen
$var = "some value";  $vname = 'var'; ${$vname} = "other value";
@ary = ( .... );      $vname = 'ary'; push(@{$vname}, "more");
sub fun { ... }; $vname = 'fun'; $vname->(); $SIG{'INT'} = $vname;

# Eine sinnvolle Anwendung symbolischer Referenzen
if ($arg =~ /-D(\w+)=(\w+)/) { ${$1} = $2 }
Beispielprogramme
refs-display.pl Zeigt "nackte" Referenzen
prompter.pl Übergabe von Referenzen auf Filehandles
opener.pl Wrapper um die open()-Funktion
ref-lvalue.pl Undokumentierte LVALUE-Zeiger
matrix.c Matrix-Beispiel in C: Variable Zeilengrößen
matrix.cc Matrix-Beispiel in C++: Variable Zeilengrößen
matrix-dyn.pl Dynamisches Einlesen von Matrizenwerten
flat-list.pl Verschachtelung bei Listen nicht direkt möglich
lol.pl Demo der list of list
loh.pl Liste von Hashes
hol.pl Hash von Listen: Mehrere Werte pro Schlüssel = Multihash
hoh.pl Hash von Hashes: Dünn besetzte Matrizen
cmplx-print0.pl Versuch, komplexe Datenstrukturen anzuzeigen
cmplx-print1.pl Komplexe Datenstrukturen anzeigen: Selbstgemacht
cmplx-print2.pl Komplexe Datenstrukturen mit Data::Dumper
bintree-traverse.pl Traversiert einen binären Baum
graph-traverse.pl Traversiert einen zusammenhängenden Graphen
obj-closures.pl Objekte mit Closures
sort-ip.pl Sortiert IP-Adressen in Dotted-Quad-Notation
multihash-flatfile.pl Multihashes in einer flachen Textdatei speichern
tie-refhash.pl Referenzen als Schlüssel in Hashes
copy-shallow.pl Shallow Copy: Oberflächenkopie verschachtelter Strukturen
copy-deep.pl Deep Copy: Tiefe rekursive Kopie verschachtelter Strukturen
symrefs-example.pl Beispiele symbolischer Referenzen
symrefs-hairy.pl Symbolische Referenzen können haarig sein
Ergänzungen
Lösungen zu ausgewählten Übungsaufgaben

In Vorbereitung

FAQ
Errata

Z.Zt. keine Fehler bekannt.

[Prev] [Up] [Next]

[Alte Quelle]


Last modified: $Date: 2006/05/18 12:55:45 $
FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy
FreeBSD Logo