[LUGA] Mit freundlicher Unterstützung von:
Linux New Media AG

Mail Thread Index


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [luga] Perl: isBlessed() ???



Hallo !

On Wed, 25 Jun 2003, Thomas Klausner wrote:

> > Ich haette da eine Frage an die Perl-Profis der Liste:
> 
> Kleine Werbeeinschaltung:
> http://vienna.pm.org
> Dort gibts Links zur Mailingliste der Vienna.pm

weiss... aber immer wenn ich's brauch find ich's nicht (mehr...)

> my $type=ref($obj);
> 
> $type enthaelt dann entweder nix (skalar), oder "SCLAR", "ARRAY", "HASH", ..
> fuer die jeweiligen Datentypen, oder den Namen der Klasse, wenns ein
> geblesstes Ding ist.

ja, eben dieses '...' hab ich befuerchtet. auch will ich ja nicht auf
("" || "SCLAR" || "ARRAY" || "HASH" || ...) pruefen. Und sonst gibts ja
keine Unterscheidung. Kann meine Klasse ja auch "HASHI" und hat ja dann
ein ->isa


> > Jetzt mach ich das so:
> > 
> > error1 if (!defined $obj);                  # <-- undef's weg
> > error2 if (ref $obj eq '');                 # <-- skalare weg
> > error3 if (!$obj->isa('MeineBasisKlasse')); # ... unt tschuess!!
> > ... machwas mit $obj...
> > 
> > Der Block funktioniert mit Undefs, Skalaren und Objekten. Wenn allerdings
> > ein ARRAY oder ein HASH uebergeben wird bricht mein Probramm ab :-)
> 
> Klar. Weil ref($obj) eben HASH oder ARRAY zurueckgibt und nicht ''. Also
> passiert $obj den 2. Test. Wenn $obj aber ein HASH oder ARRAY ist, gibts
> kein $obj->isa.
> 
> Loesuug1:
> 
> use UNIVERSAL qw(isa);
> ...
> error2.5 unless (isa $obj,'MeineBasisKlasse')

Ja, dass gefaellt mit schon ganz gut. Mal sehen ob diese Klasse (wie in
Perl leider viel zu oft) dafuer nicht andere Fallstricke hat...

> Loesung2:
> Gib den test in eine eval-Block, und check nachher $@
> eval {
>  $obj->isa('MeineBasisKlasse')
> }
> error2.5 if $@;

Das ist aber dann schon der pragmatische Ansatz (fast schon wie: mache
SYSTEM() auf $0 und parse dann STDOUT und STDERR...)


Danke fuer die Hilfe !

Liebe Gruesse, Schroettner Robert

|   Schroettner Robert
|   IT-Services
|   Eurodata Datenverarbeitungsdienst Ges.m.b.H.  __   _
|   Tel:  +43-1-7747076-51                       / /  (_)__  __ ____  __
|         +43-664-4345798                       / /__/ / _ \/ // /\ \/ / 
|   Fax:  +43-1-7747076-12                     /____/_/_//_/\_,_/ /_/\_\
|   WWW:  http://www.ednet.at                           TUX for President
|
|   EURODATA - WIEN - PRAG - BRUENN - BUDAPEST - BUCAREST




powered by LINUX the choice of a gnu generation
linux user group austria;
Suche
Suche
Letzte Änderung:
webmaster@luga.at
September 2010