Thread Erkennen, welchen Inhalt eine Variable beinhaltet: Ob String, Array, Hash,... (6 answers)
Opened by Mates at 2007-06-28 16:35

PerlProfi
 2007-06-28 17:09
#77970 #77970
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Schau dir mal CPAN:Scalar::Util an.
Da findest du die Funktionen reftype() und blessed() zusammen mit ref() kannst du damit alles Mögliche prüfen.

Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
my $ref = ref($data);
my $reftype = reftype($data);
my $blessed = blessed($data);

if ( $ref ) {
# $data ist eine Referenz
if ( $blessed ) {
# $data ist ein Objekt
if ( uc($blessed) eq 'REGEXP' ) {
# $data ist eine Referenz auf einen regulären
# Ausdruck, z.B. mit qr// erstellt
}
}
else {
# $data ist kein Objekt
if ( $reftype eq 'REF' ) {
# $data ist eine Referenz auf eine Referenz
}
elsif ( $reftype eq 'SCALAR' ) {
# $data ist eine Referenz auf ein Scalar
}
elsif ( $reftype eq 'ARRAY' ) {
# $data ist eine Referenz auf ein Array
}
elsif ( $reftype eq 'HASH' ) {
# $data ist eine Referenz auf ein Hash
}
elsif ( $reftype eq 'CODE' ) {
# $data ist eine Codereferenz
}
elsif ( $reftype eq 'GLOB' ) {
# $data ist eine Globreferenz
}
}
}
else {
# $data ist keine Referenz
}

Das geht auch nur mit ref(), aber ich finde es so schöner, der Vorteil ist vor allem, dass du mit reftype() wirklich den Type bekommst und nicht wie bei ref(), wenn es ein Objekt ist, die Klasse des Objektes.
Und mit blessed() bekommst du eben die Klasse und nicht den Type.
blessed() liefert undef, falls es kein Objekt bekommt.
reftype() liefert undef, falls es keine Referenz bekommt.

MfG

View full thread Erkennen, welchen Inhalt eine Variable beinhaltet: Ob String, Array, Hash,...