!! Perl und seine Globs

:Artikel auf Anregung von JensKapitza und der [DULUG|http://www.dulug.de]. \\ Bitte verbessern, wenn ich hier Mumpitz® schreibe --MarkusMonderkamp

Der Begriff ''glob'' (global operator) ist in Perl doppelt belegt, sozusagen ein Teekesselchen.

!1. Es gibt den ''fileglob'', mit dem das Skript ein array von Dateien zurückliefert, die den in dem Globpattern aufgeführten Text enthalten:

{{{
@dateien = glob("kommendeLottozahl*");
}}}

... liefert z.B. die Dateien ''kommendeLottozahl.xls'', ''kommendeLottozahlen.xls'' und ''kommendeLottozahlfalschvorhersageSchadenersatz.odf''

anderes Beispiel:
{{{
~/src/pl> perl -le'print foreach glob "kiki*"'
kiki1.txt
kiki2.txt
kikiunendlich.txt
}}}
näheres unter: ''perldoc -f glob'' im [Manual|http://perldoc.perl.org/functions/glob.html]

!2. Dann gibt es den ''typeglob'': 

Perl besitzt noch mehr Variablentypen, wie z.B. Hash, handle, typeglob, und alle besitzen zur Unterscheidung auch so ein lustiges kleines Zeichen davor. Hier eine kleine Liste aller lustigen Zeichen, mit denen man sich noch beschäftigen kann.

||Typ || Zeichen || Beispiel || Ist ein Name für:
|Skalar | $ | $bsp | Ein individueller Wert (Zahl oder String)
|Array | @ | @test | Eine Liste von Werten mit einer Ganzahl als Index
|Hash |	% | %zinsen | Ein Gruppe von Werten mit einem String als Index
|Subroutine | & | &was | Ein aufrufbares Stück Perl-Code
|__Typeglob__ | __*__ | __*maus__ | __Alles namens maus__

Code-Beispiel:

{{{
$spud   = "Wow!";
@spud   = ("idaho", "russet");
*potato = *spud;   # Zuweisung eines Typeglob-Alias' / Alias potato to spud using typeglob assignment
print "$potato\n"; # prints "Wow!"
print @potato, "\n"; # prints "idaho russet"
}}}

nettes Spielzeug

: Ich habe typeglobs noch nie wirklich benutzt und denke auch, daß das kaum jemand tut. Es ist ein Relikt aus den Urzeiten von Perl und wurde früher benutzt, um Arrays an Funktionen zu übergeben, als es in der Sprache noch keine Referenzen gab (siehe ''perldoc perldata''). Im Grunde ist das eine der Spracheigenschaften, die wirklich nur Verwirrung bringen. Wenn man einen Typeglob zuweist ist das im Grunde, als ob man ein Struktur mit einem Skalar, einem Array und einem Hash zuweist. Den Fall, in dem man das wirklich so braucht und wo es die Lesbarkeit erhöht statt zu vermindern, müsste man IMO mit der Brechstange konstruieren (Hallo Jens!).\\ Die einzige echte Anwendung, die ich mal hatte ist, daß neben den o.g. Typen auch Filehandles "geglobbt" werden, die anderweitig nicht so leicht zuweisbar sind. Dies hat sich jedoch mit Einführung der file-Referenz-Objekte (ab Perl 5.6) auch erledigt. Die Anwendungen für typeglobs reduzieren sich damit aus meiner Sicht auf ganz wenige Fälle z.B. für code obfuscation. -- ThomasBayen

Erläuterungen: [deutsch|http://de.wikibooks.org/wiki/Perl-Programmierung:_Nat%C3%BCrliche_und_k%C3%BCnstliche_Sprachen] und [englisch1|http://www.unix.org.ua/orelly/perl/advprog/ch03_01.htm] und [englisch2|http://www.unix.org.ua/orelly/perl/advprog/ch03_02.htm].

[{Tag Perl}]