2012-11-15 17 views
5

Perlの$_関数に相当するものはありますか?私はC#でいくつかの古いperlスクリプトを書き直しています。私はPerlを学んだことはありません。 HERESに私はすべての

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

C#は知っているがperlは知っている人のために、 '$ _'は何をしているのか教えていただけますか?または、あなたがしようとしていることを説明してください。ある言語から別の言語へ厳密に変換すると、最良の結果が得られない場合があります。ハンマーでねじを使う方法を尋ねるようなものかもしれません。 – cadrell0

+3

@ cadrell0、 '$ _'は上記では使用されていません。 '$ _ [0]'と '$ _ [1]'は配列 '@ _ 'の最初と2番目の要素です。 '@ _'はサブに渡される引数のリストです。 '@ _ 'の要素は、コピー(値渡し)ではなく、実際のargs(参照渡し)にエイリアスされます。 – 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ではtrueまたはfalseと評価されます。私は 'IsText'という名前に基づいて推測しています。それはブール値としてしか使われていないからです。 – ikegami

+0

はええ、その古いニューススクレーパーので、私は、これはあなたがこの回答に改善したい場合は、 – pyCthon

0

Perlの$_機能

それは機能しません。それは「それ」を意味する代名詞です。

もう1つの特別な変数@_があります。これは「それら」を意味する代名詞です。

C#にはアナログがありません。

+0

これに対応して、$ _ [0]はそれらの0番目のインデックスを意味します。スカラー(@ _)はそれらの数などを返します。 – singingfish

関連する問題