9

私はperlの初心者ですgrep。リストをフィルタリングする関数を読んでいます。以下のプログラムに出会いました。

#!/usr/bin/perl

use strict;
use warnings;

# initialize an array
my @array = qw(3 4 5 6 7 8 9);

# first syntax form:
my @subArray = grep { $_ & 1 } @array;

このステートメントmy @subArray = grep { $_ & 1 } @array;は に奇数を返します @array$_ & 1expression( )の仕組みがわかりませんでした。Google で検索しましたが、有用なリンクは見つかりませんでした。

  • それは特別な演算子ですか?

  • そのEXPRの他の変種はありますか?

前もって感謝します。

4

5 に答える 5

4

多くの人が指摘しているように&、ビットごとの AND 演算子です。これは、比較される 2 つの数値がビットに変換されて比較されることを意味します。

たとえば、 grep 内で true と評価される return は次のようになります3 & 11

Num | Bits
----+-----
  3 | 1 1
& 1 | 0 1
----+-----
  1 | 0 1   <- result of 'and'ing each bit column

同様に、false を4 & 1返します。0

Num | Bits
----+-------
  4 | 1 0 0
& 1 | 0 0 1
----+-------
  0 | 0 0 0  <- all zeros because no column contains 1 & 1

そうは言っても、奇数をフィルタリングする別の方法はmod、2 の数を使用することです。

my @odd = grep { $_ % 2 } 1 .. 7;    # 1, 3, 5, 7
于 2013-04-17T12:42:32.507 に答える
0

$_grep 関数によって設定される変数です。perl 関数のほとんどは、特に指定がない限り、$_ を操作します。@array の各要素に対してGrep定義された無名サブ ( である) を呼び出し、ビットごとの を作成します。結果が真の値である場合は、結果の配列に追加されます。{ $_ & 1 }&

于 2013-04-17T12:32:16.717 に答える