Search::Saryer 〜実践編〜

導入編に続き、実践編です。

まず、Search::Saryerの主なメソッドは以下のような感じ。

new

コンストラクタにはfile、arrayをとります。

filename
This option is the alias of file.
arrayfile
arrayfilename
These options are aliases of array.

との事でエイリアスがあります。

fileは必須で、arrayは引数のfileから推測してくれますので、
デフォルトのファイル名(*.ary)の場合は省略できます。


grep( PATTERN, [IGNORE_CASE] )

$saryer->grep("パターン", 1)

第2引数IGNORE_CASEがtrue時はcase-insensitive searchを行う。

look(PATTERN, [START_TAG, END_TAG, IGNORE_CASE])

$saryer->look("パターン", '<item>', '</item>', 1)

grepに加えタグの指定により要素を指定できます。

つまり

<item>
<id>1</id>
<name>キン肉マン</name>
</item>
<item>
<id>2</id>
<name>キン肉マンフェニックス</name>
</item>
<item>
<id>3</id>
<name>キン肉マンゼブラ</name>
<item>
</item>
<item>
<id>4</id>
<name>キン肉マンマリポーサ</name>
</item>
<item>
<id>5</id>
<name>キン肉マンソルジャー</name>
</item>
<item>
<id>6</id>
<name>タイルマン</name>
</item>

というファイルの〜が一要素としてsearchされます。

例)

my $saryer = Search::Saryer->new(file => './s2.txt');
# 見づらいので改行落としてます
my @look = strip_nl($saryer->look('キン', '<item>', '</item>')); 
### @look;


結果

### @look: [
###          '<item><id>1</id><name>キン肉マン</name></item>',
###          '<item><id>2</id><name>キン肉マンフェニックス</name></item>',
###          '<item><id>3</id><name>キン肉マンゼブラ</name><item></item>',
###          '<item><id>4</id><name>キン肉マンマリポーサ</name></item>',
###          '<item><id>5</id><name>キン肉マンソルジャー</name></item>'
###        ]

残念ながらそれ程速度は出ませんでした。。。
(普通にファイル開いて正規表現で引っこ抜いたのと同等くらい。)

一つの長文を解析するというのが本来の用途なんでしょうか。。。