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>
というファイルの
例)
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>' ### ]
残念ながらそれ程速度は出ませんでした。。。
(普通にファイル開いて正規表現で引っこ抜いたのと同等くらい。)
一つの長文を解析するというのが本来の用途なんでしょうか。。。