※ ChatGPTを利用し、要約された質問です(原文:Perlの変数に文字数制限(容量制限)はあるか)
Perlの変数に文字数制限(容量制限)はあるか
このQ&Aのポイント
Perlの変数には文字数制限(容量制限)はありますか?
Perlで書かれた自作の掲示板で、突然データが欠けてしまいました。データ容量が1.5MBほどあり、容量制限が関係しているのか疑問です。
他にも似たような問題が発生した経験がある方、アドバイスをお願いします。
Perlの変数に文字数制限(容量制限)はあるか
Perlで書いた自作の掲示板なのですが、ずっと普通に動いていたのですが
急にデータが欠けてしまいました。書き込みデータはテキスト形式で、
↓の様な形で保存しています。
<div>1つの書き込みの中身</div>\n
<div>1つの書き込みの中身</div>\n
<div>1つの書き込みの中身</div>\n
<div>1つの書き込みの中身</div>\n
<div>1つの書き込みの中身</div>\n
1つの書き込みは1行に収まっていて、書き込み時に \n を付けて保存して、
読み込み時は配列に読み込んで、べろっと出すだけの処理です。
掲示板書き込みなので unshift で上が新しい書き込みにしてあります。
通常のタグ禁止処理や、改行コード処理はしてあります。Perl5.6.1です。
数日前、容量が減っていることに気付き、調べてみると、
<div>1つの書き込みの中身</div>\n
<div>1つの書き込みの中身</div>\n
<div>1つの書き
のような形でデータが欠けていました。欠けていると言っても9割方消えていました。
残っていたのは新しい側の書き込みです。
いつ消えたのか、何をした時に消えたのかが不明のため、原因を探っている段階です。
もちろん、一番怪しいのはプログラムのミスなのですが、それも調べつつ、
ちょっと前から気になっていた点として、データ容量が1.5MBぐらいまで
ふくらんでいて重くなっていたんです。
data.dat のような1ファイルにテキストばかり1.5MB、そして内部の処理でも
普通にその容量を一つの変数に入れたりしています。
データが唐突にぶつっと切れていることと、容量が多くて気になっていたこと、
この辺りでちょっと怪しいのですが、変数の容量制限、ファイルの容量制限が
調べても出てきません。知っている方いましたら教えてください。
他にも、そういうバグの時こういうミスがあったよ、など、ありましたら
アドバイスをお願いします。
自分が作った物のデバッグで恐縮なのですが、よろしくお願いします。
お礼
別の質問になってしまったので立て直します。 回答してくれた皆様、ありがとうございました。
補足
読み込み時、flock処理を追加してみます。 # 書き込みデータの読み込み open( BBS, "< ../data/bbs.dat" ); flock( BBS, 1 );# ロック @BbsData = <BBS>; $BbsCount = @BbsData; close ( BBS ); 修正機能は付いていません。 でもそのうち付けようと思っていたので、付ける時にロック系、気を付けたいと思います。 とりあえず再開に向けて、処理するデータを小さくし、読み込み時に flock処理を追加してみます。 あと今回のことを一応、サーバー会社に聞いて返事を待つと。 それからもうちょっと頻繁にバックアップを取ります。。。 Googleにキャッシュが残っていたので少しサルベージしましたが、抜けが出てしまいました。 Google以外でそういうキャッシュが自動的に残っている可能性のあるサイトってありませんかね? xxx.cgi に最初の20件、 xxx.cgi?page=1 だと21件~40件、 xxx.cgi?page=2 だと41件~60件、 xxx.cgi?page=3 だと61件~80件 という感じで表示させていたのですが、別ページ扱いなのでキャッシュが残ってたりするんですよね。