SplitPart関数

「#--SplitPart」で検索すると確実にヒットします。

この関数は、RssDefault関数や、RssAnalyze関数で生成した、各種入力フォームから送られてきたデータを整理します。

引数は作成するRSSのバージョン、戻り値は整理された入力情報を格納した連想配列リファレンスです。

このほかに、入力情報がすべて格納された連想配列リファレンスを使用します。

それでは、処理の流れを見てみましょう。

入力データの振り分け

入力情報の中からRSS作成に必要なデータをピックアップし整理していきます。

for (keys %{$PARAM}) {
...
...
}

すべての入力情報が格納されている連想配列「%{$PARAM}」を、for関数でループしひとつひとつ処理していきます。

連想配列のキーには、Formタグで使われているInputタグのnameで指定された名前が格納されています。

そのキーに対応する形で入力情報があります。

そして以下の処理では、連想配列のキーに対してパターンマッチを行い、入力データを整理していきます。

日付情報の整理

現在の日付情報をセットします。

if (/^(channel|item)_dc_date$/) {
my $area = $1;
if ($version eq '1.0') {
$input{$area}->{'dc'}->{$PARAM->{$_}} = &Date($version);
} elsif ($version eq '2.0') {
$input{$area}->{$PARAM->{$_}} = &Date($version);
}
next;
}

if文が成立(パターンマッチが成立)した場合は、チャンネル(channel)または、アイテム(item)に日付情報を追加します。

RSS1.0の場合は、「dc」を指定し、さらにその中で日付情報の要素を作成する必要があります。

RSS2.0の場合は、「dc」を指定する必要がないため、直接日付情報の要素を作成します。

ともに、Date関数から現在の日付情報を取得します。

その他情報の整理

RSS作成に必要なその他の情報を整理します。

if (/^([a-z]+)_([a-z]+)$/i) {
$input{$1}->{$2} = &Utf8Flag($PARAM->{$_});
} elsif (/^([a-z]+)_dc_([a-z]+)$/i) {
my $area = $1;
my $name = $2;
if ($version eq '1.0') {
$input{$area}->{'dc'}->{$name} = &Utf8Flag($PARAM->{$_});
} elsif ($version eq '2.0') {
$input{$area}->{$name} = &Utf8Flag($PARAM->{$_});
}
}

最初のif文のパターンマッチでは、チャンネルやアイテムのタイトル、リンク先、概要とイメージのURLといった基本的な情報にマッチします。

次のif文では、チャンネルやアイテムで使われているそのほかの情報がマッチします。

そしてそのほかの情報は、前述の日付情報の格納と同じように、RSSバージョンにより格納場所が異なるため、それぞれ適切な場所に格納していきます。

return \%input;

ループが終わったら、整理し終えた連想配列リファレンスを返してこの関数を終了します。