2012-11-15 13 views
5

Gibt es ein Äquivalent zu Perl $_ Funktion? Ich überschreibe einige alte Perl-Skripte in C# und ich habe nie Perl gelernt. Heres ein Beispiel dafür, was ich

sub copyText { 
     while($_[0]){ 
      $_[1]->Empty(); 
      $_[0] = $_[1]->IsText(); 
      sleep(1); 
     } 
+0

Für diejenigen von uns, die C#, aber nicht Perl kennen, können Sie uns sagen, was '$ _' tut? Oder vielleicht erklären, was Sie versuchen zu tun. Eine strikte Konvertierung von einer Sprache in eine andere kann nicht das beste Ergebnis haben. Es kann sein, als würde man fragen, wie man eine Schraube mit einem Hammer benutzt. – cadrell0

+3

@ cadrell0, '$ _' wird oben nicht verwendet. '$ _ [0]' und '$ _ [1]' sind das erste und zweite Element des Arrays '@ _'. '@ _' ist die Liste der Argumente, die an die Subroutine übergeben werden. Die Elemente von "@ _" werden mit den tatsächlichen Argumenten verknüpft (übergeben durch Ref) und nicht als Kopien (Wert übergeben). – ikegami

+0

@ikegami Deshalb benutze ich nicht perl :). '$ _ [0]' verweist auf das Array '@ _'? Oder ist der OP-Code falsch? – cadrell0

Antwort

11

Zunächst einmal, um herauszufinden, ich versuche, ist $_ keine Funktion. Es ist nur eine gewöhnliche Variable (die zufällig von vielen Builtins gelesen und geändert wird).

Zweitens, der Code, den Sie gepostet haben, verwendet $_ nicht. Es greift auf Elemente der @_, der Parameterliste zu.

Eine besser lesbare Version des Codes Sie wäre posted:

ist
sub copyText { 
    my ($arg1, $arg2) = @_; 
    while ($arg1) { 
     $arg2->Empty(); 
     $arg1 = $arg2->IsText(); 
     sleep(1); 
    } 

    $_[0] = $arg1; # arg1 is passed by reference 
} 
  • arg1 ein boolean als Referenz übergeben.
  • arg2 ist eine Art von Objekt mit einer Methode namens Empty und eine mit dem Namen IsText.

Sorry, ich weiß nicht C#, aber hoffentlich können Sie damit weitermachen.

+0

danke das hat mir sehr geholfen! – pyCthon

+1

'$ arg1' ist möglicherweise kein Boolescher Wert. Jeder Wert wird in Perl als wahr oder falsch ausgewertet. Ich vermute, basierend auf dem Namen 'IsText' und da es nur als Boolean verwendet wird. – ikegami

+0

Ja, es ist ein alter News-Scraper, also denke ich, das war ein Check, um zu sehen, ob etwas falsch ist. – pyCthon

0

Perl $_ Funktion

Es ist keine Funktion. Es ist ein Pronomen, das "es" bedeutet.

Es gibt eine weitere spezielle Variable @_, die ein Pronomen ist, das "sie" bedeutet.

In C# gibt es kein Analog.

+0

entsprechend $ _ [0] bedeutet den 0. Index von ihnen. Skalar (@_) gibt die Anzahl von ihnen usw. zurück – singingfish