Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11533[/thread]

Gegenteil von new



<< >> 8 Einträge, 1 Seite
H3llGhost
 2008-03-28 00:51
#107576 #107576
User since
2007-10-14
60 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

ich habe ein Array, in dem ich mit new Objekte erstelle.
Nun möchte ich die, wenn diese nicht mehr gebraucht werden, wieder entfernen, dazu wäre es ja schön, wenn es einen Befehl gibt, der das Gegenteil von new bewirkt.
Gibt es so einen Befehl in Perl?
Ich habe gesehen, dass es den Befehl oder das Kommando delete gibt, aber ich weiß nicht was für eine Bedeutung es hat.
Würdet ihr mir bitte helfen? :)

Danke im Voraus!
#Kein Kommentar
 2008-03-28 00:57
#107577 #107577
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
normalerweise ist das objekt 'gelöscht', wenn man das objekt auf undef setzt (so mache ich das zumindest):

Code (perl): (dl )
1
2
3
4
5
sub destroy{
    my $self = shift;

    $self = undef;
}


ob man die methode jetzt destroy oder delete nennt, bleibt sich gleich.
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
pq
 2008-03-28 01:13
#107579 #107579
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
jede variable wird eh 'gelöscht', sobald sie aus dem scope fällt und es keine referenzen
mehr auf sie gibt.
im übrigen gibt es eine universelle methode namens DESTROY, die automatisch aufgerufen wird,
wenn das objekt keine referenz mehr hat. die muss man aber nur implementieren, wenn von
dem objekt abhängige daten noch irgendwo anders gespeichert werden und man die löschen will.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
betterworld
 2008-03-28 01:16
#107580 #107580
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Hm, delete ist ist in der Tat ein vordefinierter Operator, und wenn man den meint, ist es auch nicht egal wie man ihn nennt. Damit entfernt man primaer Werte in einem Hash; bei einem Array ist es besser, splice oder pop oder shift zu nehmen.

Quote
ich habe ein Array, in dem ich mit new Objekte erstelle.

Erzaehl noch mal genauer, was es mit Deinem Array auf sich hat. In einem Array erstellt man jedenfalls nichts mit new, sondern dazu nimmt man push oder aehnliches.

Quote
Code (perl): (dl )
1
2
3
4
5
 sub destroy{
    my $self = shift;

    $self = undef;
}

Dieser Code ist nicht so sinnvoll. $self ist eine Kopie, und die Kopie wird geloescht. Tut also nichts weiter.
#Kein Kommentar
 2008-03-28 11:06
#107587 #107587
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
betterworld+2008-03-28 00:16:58--
Quote
Code (perl): (dl )
1
2
3
4
5
 sub destroy{
    my $self = shift;

    $self = undef;
}

Dieser Code ist nicht so sinnvoll. $self ist eine Kopie, und die Kopie wird geloescht. Tut also nichts weiter.


ohh... wusste ich garnicht.. sorry!
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Gast Gast
 2008-03-28 14:34
#107600 #107600
Also mit den Array hat es folgendes auf sich:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
sub getServer
{
[...]
return new Server($serverId);
[...]
}

%g_servers = ();
$g_servers{$s_addr} = &getServer($s_peerhost, $s_peerport);


Und den einen möchte ich nun rauslöschen.
Versteht ihr was ich vorhabe? :)
nepos
 2008-03-28 14:42
#107602 #107602
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, einfach
Code (perl): (dl )
delete $g_servers{$s_addr};

Das entfernt den einen Eintrag aus dem Hash.
Gast Gast
 2008-03-28 14:47
#107604 #107604
Danke danke ... :)
Werde ich mal heute ausprobieren ... ;)
<< >> 8 Einträge, 1 Seite



View all threads created 2008-03-28 00:51.