2012-11-15 11 views
5

Czy istnieje odpowiednik funkcji Perla $_? Piszę niektóre stare skrypty perla w języku C# i nigdy nie nauczyłem się żadnego perla. Herezje przykład co usiłuję dowiedzieć się

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

Dla tych z nas, którzy znają C#, ale nie perl, czy możesz nam powiedzieć, co robi '$ _'? A może wyjaśnij, co próbujesz zrobić. Dokładne przeliczenie z jednego języka na inny może nie przynieść najlepszych rezultatów. To może być jak pytanie, jak użyć śruby młotkiem. – cadrell0

+3

@ cadrell0, '$ _' nie jest używane w powyższym zakresie. '$ _ [0]' i '$ _ [1]' są pierwszymi i drugimi elementami tablicy '@ _'. '@ _' jest listą argumentów przekazywanych do podsieci. Elementy '@ _' są aliasingowane do rzeczywistych argumentów (przekazywanych przez ref), a nie jako kopie (przekazywanie według wartości). – ikegami

+0

@ikegami Dlatego nie używam Perl :). '$ _ [0]' odwołuje się do tablicy '@ _'? Czy kod OP jest nieprawidłowy? – cadrell0

Odpowiedz

11

Przede wszystkim $_ nie jest funkcją. Jest to zwykła zmienna (która jest odczytywana i zmieniana przez wiele wbudowanych).

Po drugie, kod, który wysłałeś, nie używa numeru $_. Dostęp do elementów @_, listy parametrów.

Bardziej bardziej czytelna wersja kodu ty pisał byłoby:

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

    $_[0] = $arg1; # arg1 is passed by reference 
} 
  • arg1 jest logiczna przekazywane przez referencję.
  • arg2 to jakiś obiekt z metodą o nazwie Empty i jeden o nazwie IsText.

Przepraszam, nie znam C#, ale mam nadzieję, że możesz przejść do tego.

+0

dzięki temu bardzo mi pomogło! – pyCthon

+1

'$ arg1' może nie być wartością logiczną. Każda wartość zwraca wartość true lub false w Perlu. Zgaduję, opierając się na nazwie "IsText", a ponieważ jest używana tylko jako boolean. – ikegami

+0

Tak, to jest stara skrobak wiadomości, więc domyślam się, że to był sprawdzian, czy nie wykryto czegoś złego. – pyCthon

0

$_ funkcja Perl

To nie jest funkcją. To zaimek oznaczający "to".

Istnieje inna specjalna zmienna @_, która jest zaimkiem oznaczającym "je".

Brak analogu w języku C#.

+0

odpowiednio $ _ [0] oznacza ich 0 indeks. skalar (@_) zwraca liczbę z nich itp. – singingfish