2012-11-15 58 views
5

是否有與Perl的$_函數等價的函數?我正在用C#重寫一些老的Perl腳本,我從來沒有學過Perl。繼承人的什麼,我試圖找出

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

對於那些瞭解C#而不是Perl的人,你能告訴我們'$ _'的作用嗎?或者可以解釋你正在嘗試做什麼。從一種語言到另一種語言進行嚴格的轉換可能沒有最好的結果。這可能就像詢問如何用錘子使用螺釘一樣。 – cadrell0

+3

@ cadrell0,上面沒有使用'$ _'。 '_ _ [0]'和'$ _ [1]'是數組「@ _」的第一個和第二個元素。 '@ _'是傳遞給子的參數列表。 '@ _'的元素別名爲實際參數(由ref傳遞),而不是副本(按值傳遞)。 – ikegami

+0

@ikegami這就是爲什麼我不使用perl :)。 '$ _ [0]'引用數組''_''?或者是OP的代碼錯誤? – cadrell0

回答

11

首先的一個例子,$_是不是一個函數。這只是一個普通的變量(恰好被很多內建函數讀取和更改)。

其次,您發佈的代碼不使用$_。它訪問參數列表@_的元素。

您發佈將是代碼的更更可讀的版本:

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中,任何值的計算結果都是真或假。我猜是基於名稱IsText,因爲它只用作布爾值。 – ikegami

+0

是的,它是一箇舊的新聞刮板,所以我想這是一個檢查,看看它是否拿起了一些錯誤 – pyCthon

0

Perl的$_功能

這不是一個功能。這是一個代表「它」的代名詞。

還有另一個特殊變量@_,它是一個代名詞,意思是「他們」。

C#中沒有模擬。

+0

相應$ _ [0]表示它們的第0個索引。標量(@_)返回它們的計數等。 – singingfish