I mit der folgenden Syntax über Code gekommen sind:Perl dereferencing ein Unterprogramm
$a -> mysub($b);
Und nach hinein schauen ich immer noch kämpfen, um herauszufinden, was es bedeutet. Jede Hilfe würde sehr geschätzt werden, danke!
I mit der folgenden Syntax über Code gekommen sind:Perl dereferencing ein Unterprogramm
$a -> mysub($b);
Und nach hinein schauen ich immer noch kämpfen, um herauszufinden, was es bedeutet. Jede Hilfe würde sehr geschätzt werden, danke!
Was Sie gefunden haben, ist objektorientierte Perl.
ist es in perlobj
dokumentiert. Das Prinzip ist jedoch ziemlich einfach - ein Objekt ist eine Art Super-Hash, das sowie als Daten enthält, enthält auch eingebauten Code.
Der Vorteil davon ist, dass Ihre Datenstruktur "weiß was zu tun ist" mit ihrem Inhalt. Auf einer grundlegenden Ebene, das ist nur Daten validieren - so können Sie einen Hash, der "falsche" Eingabe ablehnt.
Aber es ermöglicht Ihnen, wesentlich kompliziertere Dinge zu tun. Der eigentliche Sinn ist die Kapselung, so dass ich ein Modul schreiben kann, und Sie können es nutzen, ohne sich wirklich darum kümmern zu müssen, was in ihm vorgeht - nur die Mechanismen, um es zu steuern.
So ein wirklich einfaches Beispiel könnte wie folgt aussehen:
#!/usr/bin/env perl
use strict;
use warnings;
package MyObject;
#define new object
sub new {
my ($class) = @_;
my $self = {};
$self->{count} = 0;
bless($self, $class);
return $self;
}
#method within the object
sub mysub {
my ($self, $new_count) = @_;
$self->{count} += $new_count;
print "Internal counter: ", $self->{count}, "\n";
}
package main;
#create a new instance of `MyObject`.
my $obj = MyObject->new();
#call the method,
$obj->mysub(10);
$obj->mysub(10);
Wir „Klasse“ definieren, ist eine Beschreibung, wie das Objekt ‚funktioniert‘. In dieser Klasse haben wir eine Subroutine namens mysub
eingerichtet - aber da es sich um eine Klasse handelt, bezeichnen wir sie als "Methode", dh eine Subroutine, die , speziell, an ein Objekt gebunden ist.
Wir erstellen eine neue Instanz des Objekts (im Wesentlichen das gleiche wie my %newhash
) und rufen dann die Methoden darin auf. Wenn Sie mehrere Objekte erstellen, behalten sie jeweils ihren eigenen internen Status, genau wie bei separaten Hashes.
Auch: Verwenden Sie nicht $a
und $b
als Variablennamen. Es ist schmutzig. Sowohl weil einzelne Var-Namen falsch sind, aber auch weil diese beiden insbesondere für sort
verwendet werden.
Beachten Sie, dass ein Objekt kein Hash sein muss. – stevieb
Der zweite und dritte Absatz sind völlig falsch (und der Rest nur perlootut Duplikate). Objekte müssen keine Hashes sein. Die Methoden sind nicht im Hash; Sie sind nicht einmal mit dem Objekt verbunden (wie in JS), sondern mit der Klasse. Die Validierung kann genauso einfach ohne OOP erfolgen. Perlootut ist eine viel bessere Referenz als Perlobj. – ikegami
['perldoc perlobj'] (http://metacpan.org/pod/perlobj) – mob