参考URLhttp://www.tohoho-web.com/lng/199912/99120066.htm 以下のように4種類考えられる [ファイルの行数を得る方法] ALL : ファイル全体を変数に読み込んで、改行の数を数えるARRAY : ファイル全体を配列に読み込んで、配列の要素数を数えるSTEP : ファイルを一行ずつ読んで、行数を数えるWC : UNIX の wc コマンドを使う(wc --lines ファイル名) これらのベンチマークをとるスクリプトをhttp://www.aleph.co.jp/~fujiwara/perl/lc.plに置いてあります。 [行数を数える対象のファ […]
宣言していない変数を使用不可にする Perl では C のように変数を宣言する必要がないので必要性がもうひとつはっきりしません。 use strict; が宣言されていると、変数がmy で宣言したプライベート変数か、パッケージ名を含めて完全に記述された変数しか使えなくなります。 不正な変数名の使用によるクラッシュを避けるためです。 このようにコンパイルに影響をあたえるモジュールを pragmatic module といいます。 mod_perlやSpeedyCGIなんかを使う時に誤動作を防ぐためにuseしてプライベート変数化しておくのに便利かも
perlの正規表現などのマッチングを行うとエラーになる事がある。 エラーメッセージUnmatched [ in regex; marked by~ どうやらsjis(SHIFT-JIS)でのみ起こる現象のようだ。対象の文字列や変数の中に文字化けする文字(表や申など)があると起こる現象のようです。 このページが参考になりました。http://www.nishishi.com/blog/2006/02/unmatched_in_re.html
perlスクリプトを作成する上で面倒なのがフォームのデコードやメール送信時に文字コードをエンコードする…など。 他にもよくつかうサブルーチンをいろいろ詰め込んだライブラリ「stdio.pl」を使えばフォームデータのデコード処理、クッキー入出力、ファイルロック等たった1行で書く事が出来ます。 使用するにはstdio.plを呼び出す必要があります。使用するスクリプトとstdio.plを同じディレクトリに設置する場合はスクリプト内に require 'stdio.pl'; と書くだけです。以下のサイトから入手出来ます。 WEB POWERhttp://www.webpower.jp/WEB POWE […]
perlで排他処理(ファイルロック)を行う場合様々な方法があります。 昔のレンタルサーバの場合はflock()が使えない環境などがあり、 symlinkやmkdirを使った処理が多くありました。 しかし、スピード・信頼性に優れていて、現代どこのサーバ(Unix系の)でも使えるであろうflockを使わない手はないと思います。 flockなんか壊れる、信頼しない…使い方は間違っていませんか? まずは各ロック方式の特徴を ■ symlink ・遅い。 ・ロックしたままの状態(ロック用シンボリックリンク)が残る可能性がある。 ・サーバーによっては使えない場合がある。 ■ mkdir ・遅い。 ・ロック […]