Perl/ActivePerl For UNIX/Linux/Windows
 
TryThe Homepage
初めてのCGI
CGI 研究室
ダイナミックCGI
ダウンロード
サービス
サーバ構築(Windows)
データベースアクセス
有料サービス
FAQ
お問い合わせ
このページを印刷
コラム
このコーナーは、私が疑問に思った事、良く質問される事の独り言です。 大変多く販売されているPerlの参考書とは多少異なる場合もありますが、頭の隅にでも置いておくと便利かな?

へ〜へ〜へ〜へ〜トリビアにもなりませんか?
  • Perlはインタプリタ?
    テキストで書かれたコードを直接実行できてしまいますからインタプリタのようですが、 厳密に言えば一度にすべてをコンパイルして実行されていますから実行オブジェクトを持たないコンパイラといえます。
    その証拠にコードの一部にエラーが有っても実行できません。 通常のインタプリタでは、実行された行にエラーが有って初めてエラーを検出します。

  • 関数の置き場所
    インタプリタの場合は、必要に応じてコンパイルしますから後置きのほうがいいのですが、 perlはすべてをコンパイルして実行していますからメインルーチンの前に置いても遅くなることはありません。 筆者の場合は、皆さんに使用していただく事を前提に作成していますので、前方に初期設定を置き、後方に関数を置くようにしています。

  • 前置き関数の謎
    perlでは関数をメインルーチンの前に置いても後ろに置いても、ほとんど同じなのですが、 1つだけ違いが有ります。 perl5からは、前置きの関数を呼び出す場合にだけ「&」を省略できます。
    #!/usr/local/bin/perl
    sub pi {
      local($pi) = $_[0] * 3.14159;
      pi;
    }
    print pi(12.123);

    もっともこれも曖昧で、現在はどこに置いても&を省略できるようです。

  • if文の単純化
    一般的なif文の書式は、if (条件) { 式; }ですが、1行で処理できる場合に限り単純化できます。 (条件) && 式;たとえば、$matchが真ならループから抜け出すコードを一般的には
    if ($match) { last; }と書きますが、省略形で書くと、
    $match && last; と書く事ができ、全く同じ効果が得られます。

  • foreachはfor
    foreachは、forと書いても全く同じ働きをします。
    配列変数の値をすべて表示するには、
    foreach (@DATA) { print "<p>$_</p>\n";}
    としますが、 省略して
    for (@DATA) { print "<p>$_</p>\n";}
    と書くこともできます。

  • $^O変数
    $^O(アルファベットの「O」)を使えば、perlが動作しているマシンが調べられます。
    print $^O;一般的なUNIX系OSでは、「solaris 」を、Windows系では「MSWin32 」を返します。 これで、あなたのサーバで使用できる機能をある程度知る事ができます。

  • 指定した変数の表示
    デバック中など、時として指定した変数の内容を調べたい場合があります。 テキストボックスに指定した変数名の内容を見るには変数名の前にさらに$を付けます。
    print $$QUERY{'text'};

  • 計算式の計算
    データとして指定された計算式の結果を得るには、eval関数を使います。
    $calc = "sin(45 * (3.14159 / 180))";
    print eval $calc;
    このコードを実行すると、0.707106312093558と計算結果が表示されます。
    もちろん、テキストボックスなどに入力された計算式でも同じように計算されます。
Copyright 2004 Terra. All rights reserved. No reproduction or republication without written