質問: scraper { process 'table.ranking tr','data[]' => scraper { process '//td[1]','RANK' =>'TEXT'; process '//td[2]','name' =>'TEXT'; process '//td[3]','country' =>'TEXT'; process '//td[4]','PT' =>'TEXT'; }; }; こんな感じで収集したデータから MYSQLなどデータベースを使用せずに nameで検索してあたった配列からRANKを呼び出したいのですが出来ますでしょうか? 出来る場合、表示の仕方も教えていただきたいです。 よろしくおねがいします。
回答: 正規表現で検索する方法です。 ``` my $search_word = "○○ ○○"; # 検索する名前 for my $data (@{$res->{data}}) { if ($data->{name} =~ m/$search_word/o) { print "$data->{name}と一致したデータ:ランキング $data->{RANK}\n"; # すべてのデータ表示 print "$data->{RANK} $data->{name} $data->{country} $data->{PT}\n"; } } ``` フォームから送信された場合など、区切り文字が含まれているケースにも対応させる為には、次のように事前(※「for my $data ~」の直前)に置換しておくといいです。 ``` $search_word =~ s/(?:・|\s)/ /; # 検索対象のデータに合わせて区切り文字を統一します。 ``` ※上記は、検索対象のデータの名前の区切りが半角スペースの場合ですが、もし「・」になっている場合は、「s/\s/・/」のようにします。