2012-12-17 13 views
6

Ich bin in Perl-Modulen oft auf diese Zeile gestoßen, aber ich konnte nicht herausfinden, was genau das bedeutet.

Bitte erklären Sie mir die Aussage, damit ich fortfahren kann.

Antwort

8

Ich denke, das ist eine der ersten Zeilen in einer Klassenmethodenfunktion. Diese Linie parst @_ die die list of the function arguements ist, und extrahiert den ersten param die immer eine Referenz auf das Objekt ist in$self und extrahiert den Rest von ihnen in ein hash%myInputs. Dies natürlich davon aus, dass die Funktion mit dem arguements in Hash-Format, wie in dem unten Perl/Tk-Funktion

$mw->Button(-text => "RIGHT", -command => sub { exit }) 
    ->pack(-side => 'right', -fill => 'both'); 
6

my ($ self,% myInputs) = @_ genannt wird;

Nicht alle Funktionen erhalten das erste Argument $self. Konventionsgemäß funktionieren nur diejenigen, die mit dem Pfeiloperator aufgerufen werden, ->; Beim Aufruf mit -> wird implizit ein spezielles Argument gesendet, das auf das Objekt verweist. Alle Funktionen und Methoden in Perl sind auf die gleiche Weise deklariert (mit dem Schlüsselwort sub). Nur der Aufruf bestimmt, ob die Funktion eine Methode ist oder nicht.

Die my ($foo, $bar) = ($x, $y); wird als parallele Zuweisung bezeichnet. Das ist alles, was hier vor sich geht!

Beobachten Sie einen Hash kann von einem Array in Perl initialisiert werden.

my @foo = qw/ foo bar baz quz /; 
my %hash = @foo; 
print $hash{foo}; # outputs bar 

Weil Sie mit dem Hash-%myInputs sind zuweisen, wird der Hash ausdrücklich alle Eingänge zugewiesen, die nicht die implizit gesendet (weil du das weg in $self sind ziehen). Aber sei vorsichtig, es würde nicht viel Sinn machen, das Folgende richtig zu machen?

Aus dem gleichen Grund macht es auch nicht viel Sinn, Ihre Funktion mit einer unzahligen Anzahl von Argumenten aufzurufen! Beide werden eine Warnung erzeugen.

+0

Aber was ist die Notwendigkeit $ selbst der Verwendung! Es verwirrt mich nur so sehr! – user1855888

+1

@ user1855888 '$ self' bezieht sich auf das Objekt, das Sie anrufen. Wenn Sie 'my $ a Animal-> new' aufrufen und dann' $ a-> run' aufrufen, dann würde '$ self' (erstes Argument) innerhalb von' sub run {} 'auf' $ a' gesetzt werden. In anderen Sprachen nennst du es 'this'. Sie können es in Perl auch '$ this' nennen, wenn Sie daran gewöhnt sind,' my $ this = shift' (obwohl es gegen Konvention ist). –

1

In Perl @_; ist ein globales Array Spezielles Variablen

ähnlich wie @ARGV Das Array mit den Befehlszeilenargumente, die für das Skript enthält.

So in my ($self, %myInputs) = @_;

@_ würde das Argument der Variable $ in den Hash-Variablen darstellen %

Verwandte Themen