2011年2月9日水曜日

◆functionとfilterと$_と$inputの関係

filterについては以前もちょっと書いたことがあるがもう一度纏めておく。

パイプライン入力を受け付ける関数を書くときにfunctionとfilterのどちらを使えば良いのか。
そもそも両者はどうちがうのか。

基本的にfunctionはパイプライン入力が複数個あっても一度だけ呼ばれる。
その時のパイプライン入力は$inputで纏めて取得できる。

一方filterの方はパイプライン入力の個数分呼ばれる。
通常は個々の値に対して処理したいことがほとんどであろうから、ここらへんがfilterの存在意義なのであろう。個々のパイプライン入力は$_で参照が可能だ。

functionの方も$inputを回さなくても個々のパイプライン入力を処理することは出来る。
processブロックを作り、その中に処理を書いてあげるだけだ。

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026

function testFunction{
 
"function called $input"
}
filter testFilter
{
 
"filter called $_"
}

function testFunctionWithProcess
{
 
begin
{
   
"function begin called $input"
  }
 
process
{
   
$input
    "function process called $_"
  }
 
end
{
   
"function end called $input"
  }
}


"-- testFunction --"
1,2,3 | testFunction
"-- testFilter --"
1,2,3 | testFilter
"-- testFunctionWithProcess --"
1,2,3 | testFunctionWithProcess

20110209101136

0 件のコメント:

コメントを投稿