電子書籍の厳選無料作品が豊富!

Webプログラミング初心者です.
ファイルへの保存について質問です><
フォームから受け取ったデータを文字コード変更させてファイルに保存する場合

$name1=$cgi->param('name');
$name2=$cgi->param('number);

このように一度変数にいれ.
次に文字コードの変換をし変換した内容を再び$name1,$name2に格納した場合,
ファイルの書き出し•保存のソースコードは,

if (open(FH, "form.txt")) {
@file = <FH>;
close(FH);

unshift(@file, "$in{'name1'}\t$in{'name2'}\n"); //ココの部分です.

if (open(FH, ">form.txt")) {
print FH @file;
close(FH);
} else {
print "<p>ファイルに書き込めません。</p>";
}
} else {
print "<p>ファイルを読み込めません。</p>";
}


このような感じで良いのでしょうか?
unshift(@file, "$in{'name1'}\t$in{'name2'}\n"); の変数名の部分では例題はフォームから受け取ったものを
そのまま書いてある例が多くどのように記述したら良いかわかりません.
一度やってみてできなかったので他の部分にミスがあったのかと探し中ではありますが...
教えてください.お願いします><

A 回答 (1件)

> unshift(@file, "$in{'name1'}\t$in{'name2'}\n"); //ココの部分です


だと、 $in{'name1'} , $in{'name2'} が展開されます。%inというハッシュで、キーが 'name1', 'name2'の値、という意味です。
入れたいは%inではなく、単純な変数なのですから、どう書けばいいかわかると思いますが。

また、この方法を使わなくても
・sprintfを使う: sprintf("%s\t%s\n", $name1,$name2)
・文字列結合の演算子 . を使う: $name1 . "\t" . $name2 . "\n"
等もあります。
ダブルクォートの中の変数展開がよくわからないなら、後者の方法を使えばいいです。


あと、これって
> @file = <FH>;
> close(FH);
> unshift(@file, "$in{'name1'}\t$in{'name2'}\n"); //ココの部分です.
.......「このあたり」.........
> if (open(FH, ">form.txt")) {
の「このあたり」で他の人がform.txtを書き換えてしまう可能性があります。
>+等の読み書きモードでオープン→flock→読み込み→(必要ならファイルを空に)→書き込み→クローズ
等とするなどして、間に入ってこれないようにする必要があります
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!