2016-06-06 13 views
0

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!

+2

['perldoc perlobj'] (http://metacpan.org/pod/perlobj) – mob

Antwort

3

Das ist ein method Aufruf. $a ist der Aufruf (ein Klassenname oder ein Objekt), mysub ist der Methodenname und $b ist ein Argument. Sie sollten fortfahren, um perlootut zu lesen, das alles erklärt.

4

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.

+1

Beachten Sie, dass ein Objekt kein Hash sein muss. – stevieb

+1

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

Verwandte Themen