- ベストアンサー
cgiログファイル分割について。
ログファイルを開いて変数に代入しています。 $i=0; foreach(@files){ @log = split(/&/,$files[$i]); ($key1,$value1,$key2,$value2,$key3,$value3,$key4,$value4) = split(/=/); : のようにしました。 print "$key2<BR>\n"; などとしても ***&*** と出てしまいます。 その上で&で分割しているのに何故でしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>foreach(@files){ ここで $_ に 行が代入されて >@log = split(/&/,$files[$i]); @log には aaa=111 の様に & で区切られたものが代入され >($key1,$value1,$key2,$value2,$key3,$value3,$key4,$value4) = split(/=/); split されるのは $_ ですから元の行になりますよね。 split (/=/, @log) は巧くいかないんじゃないかと思いますよ foreach(@files){ ($key1,$value1,$key2,$value2,$key3,$value3,$key4,$value4) = split(/[=&]/); で巧くいくと思いますが、意図したとおりでしょうか?
その他の回答 (1)
- mirurin
- ベストアンサー率43% (48/111)
ログファイルはどのように書かれているのですか? &区切りならば、 ($key1,$value1,$key2,$value2,$key3,$value3,$key4,$value4) = split(/=/); を ($key1,$value1,$key2,$value2,$key3,$value3,$key4,$value4) = split(/&/); に変更してみてください。
お礼
ログは NAME=あああ&BANGOU=1111 NAME=いいい&BANGOU=2222 のような感じになっています。 最初は foreach(@files){ @log =split(/&/;$files[$i]); ($keys,$values) = split(/=/,$_); $FORMS{$keys} = $values; } のような感じでやっていました。 ($FORMS{'NAME'} とすると「あああ」と出てくる) しかし、1番最初の項目(この場合NAME)以外が出てこなくて…。
お礼
回答ありがとうございます。 >($key1,$value1,$key2,$value2,$key3,$value3,$key4,$value4) = split(/[=&]/); こんな方法もあったんですね。 初めて知りました。 一つ勉強になりました。