#!/usr/bin/perl
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("AgentName/0.1 " . $ua->agent);

#リクエストを作成します
my $req = new HTTP::Request GET => 'http://seikenzuki.bakufu.org/program/tips_perl/001hello.html';

#ユーザエージェントにリクエストを渡し、返されたレスポンスを取得します。
my $res = $ua->request($req);

#レスポンスの結果をチェックします
if ($res->is_success) {
  # タグの数を数える
  print "タグの数を数える\n";
  # ($hoge, $hogehoge)で配列の戻り値を各変数に格納できる
  (my $tag, my $count) = &searchTag("div", $res->content);
  (my $tag, my $count) = &searchTag("span", $res->content);
  (my $tag, my $count) = &searchTag("p", $res->content);
  (my $tag, my $count) = &searchTag("script", $res->content);
  (my $tag, my $count) = &searchTag("input", $res->content);
  (my $tag, my $count) = &searchTag("style", $res->content);
  (my $tag, my $count) = &searchTag("html", $res->content);
  print "\n";
  print "配列とforeachでやる\n";
  # 同じ事を配列とforeachでやるとこうなる
  # 検索するタグの配列を作成
  @tags = ("div", "span", "p", "script", "input", "style", "html");
  foreach $tag(@tags) {
    (my $tag, my $count) = &searchTag($tag, $res->content);
  } 
} else {
  print "BAD luck this time\n";
}

# searchTag関数 第一パラメーターに検索するタグを 第二パラメータに検索するコンテンツを渡す
sub searchTag {
  my $tag = $_[0];
  # [ >]は半角スペースもしくは>を表す
  # $str =~ /hoge/g でhogeの配列が返り、hogeの配列をスカラー変数に代入すると
  # 配列の長さがスカラー変数に入るため、文字列中のhogeの数を数えることが出来る
  # 間の ()= を省略すると、hogeがゼロの時にhogeの配列が出来ず結果が""になる
  my $count = () = $_[1] =~ /<$tag[ >]/g;
  print "$tagタグの数は $count 個です。\n";
  my @list = $_[1] =~ /<$tag[ >]/g;
  print @list;
  return ($tag, $count);
}

