管理 | 差分 || 新規作成 || カテゴリ一覧 | ページ一覧 | 更新履歴 | 差分履歴 || アンテナ || PUT || more≫ ≫omit
shortcut: FrontPage || WikiLab | StoreRoom/最新 | 日々の泡 | むず痒いパソコン日記/最新 || HelpPage ||[edit]
category: WebsiteWork/CgiPerl

WebsiteWork/CgiPerl/GivenUpDiary - 「さあ、Perl を始めるぞ!」― 継続実質3日 ―

LastModified :
[管理]

「さあ、Perl を始めるぞ!」― 継続実質3日 ―

2002/06/17(月)

[TOP↑] [管理]

初めての。

[TOP↑] [管理]

初めて、初心者本ソースコード丸写しのCGIを書きました。例によっておみくじです。 動くことは動きましたが、「お手本通り」に書いたわけだから、動いて当たり前なわけで、

全然嬉しくない…。

なんにつけ「いきなりスゴイことをやりたがる」のは、悪い癖です。

2002/07/21(日)

[TOP↑] [管理]

まだまだ続く設置ブーム。

[TOP↑] [管理]

もともと、オンラインソフトを試用して遊ぶのが好きだったので、同じように CGI も色々見つけてきては設置して遊んでしまう。

先日、ファイルアップ機能付きの掲示板をひとつ設置して、そのあともっとよいのを見つけて、乗り換えた。 ただ、ひとつだけ、前のにあって結構好きだった機能が、新しいほうにはない。 「考え方」的には結構簡単につけられそうな機能で、「この辺にこんなことを書けばいいんだろうなぁ」と見当はつくけど、あまりに徒手空拳。 早々に諦める。 ちゃんとお勉強を始めるに当たっては、ちょうどよい課題かもしれないけど。

ところで、このファイルアップ用掲示板でも [cgiwrapper] で躓いた。 アップした画像が表示されないので、プロバイダのお達し通りに、CGIが生成するHTMLのヘッダにルートからのパス [<BASE HREF="/ユーザー名/cgi-bin/ディレクトリ名/">] を入れたんだけど、 今度はその HTML から CGI を呼び出ときに [cgiwrapper] を通さなくなってしまって、実行できなくなる。 小一1時間も悩んで、生成される HTML の CGI へのパスを、絶対パスで指定してやる。

以前、スケジュールの書き込めるカレンダーを探してて、一つよさそうなのがあったんだけど、[cgiwrapper] のワナに落ちて動かすことが出来なかった。 一つ克服すると、次のエラー。克服すると次のエラー。 ついにどうやっても回避できそうにないエラーにぶち当たって、なんと「設定画面」にたどり着けずに、 結局別のカレンダーを使うことにしたんだった(「機能が余分すぎる」という理由で避けてただけなんだけど)。

「そろそろ [cgiwrapper] との付き合い方のコツが飲み込めたのかもしれない」と思って、「設定画面」にすらたどり着けなかったスケジュールに再挑戦。 でも、cgi から別の cgi を呼んで、その cgi が設定用の html を呼ぶ、というような処理(多分)の時に、[cgiwrapper] とは必ずしも関係ないような変な現象が起きる。 パスに含まれている[_]が抜け落ちてしまって、htmlファイルが「見つかりません」になってしまう。 …はい? 仕方がないので、直接ブラウザに件のhtmlファイルへのパスを打ち込んで、設定画面を呼び出す。 ここでこんどは明らかに[cgiwrapper]のせいである、「変なパスが生成される問題」にぶちあたる。

いや、別にもう必要はないから、放っておいていいんだけどね。

2002/07/23(火)

[TOP↑] [管理]

どっちかって言うと JavaScript

[TOP↑] [管理]

スケジューラをフレームにして、カレンダーと入力画面を並べて表示させてみる。

困った事に入力・送信してもカレンダーのほうにリアルタイムに反映させる事が出来ない。 送信したらカレンダーのフレームのほうもリロードさせればいいんだけど、それが出来ないのよ。

お手本のおみくじを真似るより、よほど楽しい。

[TOP↑] [管理]

6月末に [One Line BBS Light] というHTML埋め込み形の掲示板を設置したら、2つ、うまく動かないところがあった。

font タグを使用可にしたら、属性値がうまく解釈されない。 リンクをはると、[http://設置したHTMLのディレクトリhttp://リンクしたいURL] というおかしなパスが生成される。 どちらも、HTML に JavaScript で埋め込んでいる部分だけで出る不具合で、datファイルをcgiが解釈して吐き出してるんだろうHTMLでは正常に表示される。 JavaScript で表示される部分は、dat ファイルとは別に jsファイルが生成されて、それを読み込んでいるようなんだけど、その jsファイル中のダブルクォーテーションが、[&quot;] に置き換わってる。 「これが原因なんだろうなあ」とは思いながら、どうしたらいいのかはわからない。 「ダブルクォーテーションで括らない」という回避策で逃げる。 もう一つはパスに関わることなので、また[cgiwrapper]のワナかと思いこむが、どちらにしろ解決は思いつかない。

今朝、突然、この調査に乗り出す。 作者サイトの掲示板で[One Line BBS Light リンク]をキーワードに過去ログを漁る。 引っかかる件数がそう多くはないので、案外簡単に見つかった。

195行目、
$a1 =~ s/"/"/g;
を、
$a1 =~ s/"/\\"/g;
と変更してみてください。

という作者の回答があるんだけど、バージョンはあってるのに、手元のcgiファイルの195行目には [$a1 =~ s/"/"/g;] という文字列がない。195行目以外にも、ない。 ただ、近くの200行目から3行、

$a1 =~ s/\n/\\n/g;
$a1 =~ s/\//\\\//g;
$a1 =~ s/"/&quot;/g;

という記述がある。特に3行目の &quot; はアヤシイ…。

よくよく眺めて、前に JavaScript で「正規表現」なるものを調べてたときに、/ と / で括って、検索やら置換やら言ってたことを薄ぼんやりと思い出す。 でも、~s やら、g ってのは何だ? そんなわけで、とっとと「正規表現」の書き方探しの旅に出る。

マッチ演算子、置換演算子、変換演算子は通常入力としてグローバル変数である[$_]が使われます。しかし、[$_]以外のスカラー変数に入っている文字列を$_に代入するのは面倒です。そこで用いるのが、このパターン結合演算子「=~」です。これはスカラー変数(式)とマッチ演算子、置換演算子、変換演算子とを結合します。

g マッチするもの全てを見つける。
s 文字列を単一行として扱う。

http://www.komonet.ne.jp/~perl/chap7.htm

だそうだ。 [<スカラー変数(式)> =~ <マッチ演算子、置換演算子、変換演算子>]こんな書式で表すそうな。 解かったような、全然解からないような

でも、

(例)$input =~ s/</&lt;/g・・・スカラー変数$input中の「<」全てを「&lt;」に置換します。

というのを見て、「なるほど」と思う。

やっぱり $a1 =~ s/"/&quot;/g; は、["]を全て[&quot;]に置換してる、という解釈でよろしいらしい。 jsファイルには document.write("<font color=&quot;red&quot;>あか</font>") というコードが吐き出されているので、ダブルクォーテーションをシングルクォーテーションに置換してみる。 $a1 =~ s/"/\'/g;。またしても、なにかタイプミスをしたらしく、最初は何も表示されなくなったりしたけど、落ち着いて書き直したらフォントタグで括った文字列が正しく表示されるようになった。 改めて作者の方の解答の $a1 =~ s/"/\\"/g; を眺めて、「ああ、そうか」と[\\]の意味を納得。

あとはリンクを張ったときの処理だなあ、と思って、気が付いた。最初私は、「リンクを張ったときにパスが変になる」のを調べてたんだ。 いつのまにか私の中で「ダブルクォーテーションのせいでフォントタグが正しく表示されない問題」にすり替わってた…。 早速リンクの動作確認をすると、直ってる。 …でも、何でダブルクォーテーションでリンクが直るのかが、いまいちナゾ。 よく考えれば解かりそうだけど、もう「よく考える余力」がない。

ひろいもの1。

[TOP↑] [管理]

名前の色を変えられる掲示板なんだけど、色名か16進数を手動で入力するようになってて、ちょっと面倒。 色名を入力するテキストボックスをセレクトボックスに変えるだけで何とかなると踏んでやってみたけど、うまくいかなかった(どううまくいかなかったのかは、忘れた)。 しょうがないので、掲示板内に色のサンプルをおいて、そこから選択して入力してたんだけど。 「セレクトボックスから選べるように」という要望を出した人がいて、作者の方の回答は、「セレクトボックスに変えるだけで出来ます」とのこと。大方 また、何かタイプミスでもしてたんだろう…。

ひろいもの2。

[TOP↑] [管理]

掲示板の過去ログを漁っているとき、ちょっと気になっていた、URLの自動リンクと、タグ打ちしてリンクをはったときの不整合の解決らしきものを見つける。

if ($msg !~ /<a/){

自動リンク処理

}

っていうんですけどね。多分、「[<a]がなければ、自動リンク処理をしなさい」と書いてあるんだとは思うんだけど、こんなのもそのうち「余力」がなくてもサクっと取り入れられるようになるんでしょう。 でも、今日は力尽きたので、ここまで。

おしまい。

[TOP↑] [管理]

この後、力は尽きっ放しだったらしい。

shortcut: FrontPage || WikiLab | StoreRoom/最新 | 日々の泡 | むず痒いパソコン日記/最新 || HelpPage || [edit]
select css: default | sakura | mono | greenheck | snow | NN4.x用(多分) || LinuZau!! | VikiWiki!? || others |

管理 | 差分 || 新規作成 || カテゴリ一覧 | ページ一覧 | 更新履歴 | 差分履歴 || PUT