2012-11-15 5 views
5

Perl의 $_ 기능과 동일한 기능이 있습니까? 나는 C#에서 오래된 Perl 스크립트를 다시 작성하고 Perl을 전혀 배웠다. Heres는 내가 모든

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

C#은 알고 있지만 펄은 아는 사람들에게는 '$ _'이 무엇을 의미하는지 알려주실 수 있습니까? 또는 무엇을 하려는지 설명하십시오. 한 언어에서 다른 언어로 엄격한 변환을하면 최상의 결과를 얻지 못할 수도 있습니다. 그것은 망치로 나사를 사용하는 법을 묻는 것과 같을 수 있습니다. – cadrell0

+3

@ cadrell0,'$ _'은 위에 사용되지 않았습니다. '$ _ [0]'과'$ _ [1]'은 배열'@ _ '의 첫번째와 두번째 요소입니다. '@ _'는 서브에 전달 된 인자들의리스트입니다. '@ _ '의 원소들은 복사 (값에 의한 전달)보다는 실제 args (참조로 전달)에 앨리어싱되어있다. – ikegami

+0

@ikegami 이것이 내가 perl을 사용하지 않는 이유입니다. :) '$ _ [0]'은 배열'@ _ '을 참조합니까? 또는 OP의 코드가 잘못 되었습니까? – cadrell0

답변

11

먼저 알아 내려고 노력하고있어의 예는, $_는 함수가 아닙니다. 이것은 단지 일반적인 변수입니다 (많은 builtins에 의해 읽혀지고 변경됩니다).

두 번째로, 게시 한 코드는 $_을 사용하지 않습니다. 매개 변수 목록 인 @_의 요소에 액세스하고 있습니다. 당신이 될 것이다 게시 된 코드의

보다 더 읽기 버전 :

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

    $_[0] = $arg1; # arg1 is passed by reference 
} 
  • ARG1는 참조에 의해 전달 부울입니다.
  • arg2는 Empty이라는 메서드와 IsText이라는 메서드가있는 일종의 개체입니다.

죄송합니다, C#은 잘 모르지만 잘하면 이걸로 이동할 수 있습니다.

+0

덕분에 많은 도움이되었습니다! – pyCthon

+1

'$ arg1'은 부울이 아닐 수도 있습니다. 모든 값은 Perl에서 true 또는 false로 평가됩니다. 나는'IsText'라는 이름을 기반으로하고 있으며 부울로만 사용되기 때문에 추측하고 있습니다. – ikegami

+0

예 오래 된 뉴스 스크레이퍼 그래서 뭔가 잘못된 것을 선택했는지 확인하는 것입니다. – pyCthon

0

펄의 $_ 기능은

이 기능이 아니다. 그것은 '그것'을 의미하는 대명사입니다.

또 다른 특수 변수 @_이 있는데, 'them'을 의미하는 대명사입니다.

C#에는 아날로그가 없습니다.

+0

이에 따라 $ _ [0]은 0 번째 색인을 의미합니다. 스칼라 (@ _)는 그것들의 개수 등을 반환합니다. – singingfish