« 金づるを失った政治家の悲哀 | トップページ | xpが終了すると貸与マシンも代わった »

perlのelseifは厳しい

 ふう、perlのif文に三時間程費やしてしまいました。 といっても詳しい人にとっては、「当たり前でしょ、そんなの」と言われるほど低次元な話。
 
 MySQLを一通り復習し、実際、これまでになくデータベースもテーブルもphpMyAdminで奇麗に作成。 さて、あとはここにフォームメールで来たデータを自動的に格納しなくてはなりません。
 ここで一つ懺悔なのは、なぜか今回のシステムも含めて、私の作るフォームメールはperlなのです。 PHP環境が整っているんですけど、何せwebアプリという名前が定着する以前から、私はこれを使い回しておりまして、要するにPHP統一刷新ができていないというローテク証明みたいなものです。
 
 とはいえ時間もない。 このperlフォームメールを使い、まずは申込者とこちらの管理用アカウントに同報でsubmit内容を送信。 次に受け取ったデータを外部ファイルに一時格納して保存、それをPHPから読み込んでMySQLに格納、という手順にしました。(この流れにも、ツッコミどころ満載とは思いますが、ご勘弁の程を)

 さて、その過程の中で、文字列を数字に置き換える必要性があり、略すと下記のようなif文を組み上げてperl文に挿入。

 if ($s eq 'あ'){$s=1;}
 elseif($s eq 'い'){$s=2;}

 ところがこれを走らせた途端、perlユーザーうんざりのあの「fooがみつかりまへん」状態に。 最初は文字コードのせいかと、エンコードの類いでシフトJISやらUTF-8やらあがいてみたんですが、どうにもなりません。

 が、そもそも「fooがみつかりまへん」は、実はそれほど難しいエラーが原因ではなく、";"が抜けているとか、非常に基本的かつ原始的な文法エラーであることが多いことを思い出しました。
 しかし全くミスタイプ等は無し。 ネット等を検索して出てくる記事と比べても問題ないように見えます。
 結局、試行錯誤の末、下記のようにしたらスルッとKANSAI、もとい、問題解決。

 if ($s eq 'あ'){$s=1;}
 else{$s=2;}

 どうやら条件分岐先が二つ以上ある場合、最後はelseでないと文法エラーになるようです。

 先が一つなら、
 
 if ($s eq 'あ'){$s=1;}

 でOKなんですけどね。
 
 ん〜っと、この辺りPHPではどうだったかなぁ、と思うんですが、わざわざエラー文を書いて確かめる気力はこの時点で失せておりまして、検証しておりません。
 というか、遠因は、もともと私がスクリプティングにLINGOとその前身であるHyperTalkで手を染めたことなのかと想像します。
 HyperTalkは可能な限り自然な言語(英語)でプログラミング(当時はインタープリター/スクリプティングと明確には区別されていなかった)できるようになっており、このif文の問題も、「うん、言いたいことはわかるよ」的な曖昧さの中で染み付いた感覚かもしれません。 言い換えると"end if"があった時代の感覚なのかも。
 
 ま、今じゃスクリプトっていっても、JavaScriptやActionScriptなんて理解不能ですけど。

|

« 金づるを失った政治家の悲哀 | トップページ | xpが終了すると貸与マシンも代わった »

パソコン・インターネット」カテゴリの記事

コメント

うわ〜、貴重なコメントありがとうございました。
確かに"e"を入れておりました。 昨夜確かめてみたらelsifであれば、意図したif文が動きました。

赤面の勢いで元発言ごと削除しようかとも思いましたが、似たようなドツボにハマる人もいないとは限らないので、恥を忍んでさらしておくことにします。

しかしelseに対してelsifって、例え一打鍵でも少なくしたいプロの気持ちとはいえ、やはり自然な言葉とのズレは避けられませんね。

投稿: あやおば | 2014年4月 9日 (水) 05時58分

elseif じゃなくて elsif です。

if ($s eq 'あ'){$s=1}
elsif($s eq 'い'){$s=2}

エラーメッセージにもsyntax errorで「elseif should be elsif at ...」と出力される思います。

投稿: | 2014年4月 8日 (火) 10時13分

コメントを書く



(ウェブ上には掲載しません)




« 金づるを失った政治家の悲哀 | トップページ | xpが終了すると貸与マシンも代わった »