2016-04-25 14 views
0

Ich bin neu in Perl Sprache.

Kann die folgende Sub-Routine jemand erklären, was der Unterschied zwischen my ($self, $firstName) und $self->{_firstName} ist, wäre es hilfreich, wenn Sie mit dem im Zusammenhang mit Java erklären können:

sub setFirstName { 
    my ($self, $firstName) = @_; 
    $self->{_firstName} = $firstName if defined($firstName); 
    return $self->{_firstName}; 
} 
+1

'$ self' ist' das ', aber Perl im Gegensatz zu Java erfordert explizite Zuweisung. –

+0

@ Сухой27 danke !! –

Antwort

2

my ($self, $firstName) = definieren zwei Variablen und ordnet sie Werte von Die Liste auf der rechten Seite des Zuweisungsoperators.

$self->{_firstName} = behandelt den Wert $self als Hashref und weist dem Schlüssel _firstName des Hashs, auf den er verweist, einen Wert zu.

+0

macht Sinn, danke !! –

+3

Es kann hilfreich sein zu erklären, dass 'setFirstName' eine Methode ist und' $ self' das Objekt ist, das die Methode aufruft. – ThisSuitIsBlackNot

3

Dies ist eine allgemeine Möglichkeit, einen Accessor (Getter und Setter zur gleichen Zeit) zu definieren. Sein Name ist ein bisschen irreführend, da es nicht nur ein Setter ist.

Es entspricht so etwas wie

class Whatever { 

    private String firstName; 

    public String setFirstName (String newName) { 
     firstName = newName; 
     return firstName; 
    } 

    public String setFirstName() { 
     return firstName; 
    } 

} 

der Vorname einzustellen, verwenden

$object->setFirstName("name"); 

es zu erhalten, verwenden Sie keine Argumente:

my $name = $object->setFirstName;