関数説明


CGI専門書を見ていると、「関数」という言葉が頻繁に出てきます。その関数とはあるデータを受け取って、それを処理し、結果を出すという機能をいいます。例えば、「貴方が美容室へ行きパーマをかける」という行為に置き換えてみると、「美容師=関数・貴方=データ」となります。そして完成したヘアースタイルが美容師(関数)の処理能力!という訳です。美容師によってパーマの技法(処理能力)は大きく変わり、必要に応じて美容師(関数)を使い分けます。

電子レンジは関数です。冷えたミルク(データ)はレンジ(関数)により温かいミルク(処理結果)となります。とにかく関数は処理担当と覚えてください。これから関数の記述方法と処理能力を重要度順にお伝えします。

【関数習得のコツ】



※下記は今覚えなくてもOKです。必要な時に見て転用して下さい。
関数名 意 味 詳 細
print 説明 print関数はデータを出力する関数です。出力とは画面に表示することで、主にperl内でhtmlを出力(表示)する時に使われます。ヒアドキュメント(print <<EOF;からEOFの間に記述する)を使えば、もっと簡単に出力できます。
記述 出力(表示)する時は〜print 出力先 出力内容
perl内で「print "パール";」と記述すると、パソコンの画面左上に「パール」と表示されます。
exit 説明 exit関数は、実行中のPerlプログラムを終了させる関数です。条件文からの脱出に使用されます。
記述 強制終了〜exit[ステータスコードとなる値を返す式]
if文などの{ }内にexitを記述するだけです。
goto 説明 goto関数は、引数の場所にジュンプする関数です。
引数へジャンプするには〜goto ラベル・式・サブルーチンのいずれか一つ
記述 goto LABEL;
goto +("LABEL1","LABEL2","LABEL3")[$x];
goto $subroutine;
time
location
説明 時間を取得する関数です。time()関数は、(1970年1月1日00:00:00(UTC=世界標準時間)からの秒数を取得できます。その秒数をlocation()関数が何年何月何日何曜日何時何分というように変換してくれます。変換したデータをスカラー変数に入れると、自動的に「曜日 月 日 時刻 年」という値になります。 ※この書式の変更は不可能です。
記述 秒数から時刻・曜日・年を$jikanへ代入する〜$jikan=localtime(time());
$jikan=localtime(time());と記述すると、スカラー変数$jikanから時間や曜日を呼び出せます。
open
close
説明 open関数は、このプログラムが書かれているファイルとは別のファイルを開く関数です。close関数は、open関数で開かれたファイルを閉じる関数です。下記の「ファイルハンドル名」とは、CGIプログラムの中で使われている作業用ファイル名(ログファイル)です。
記述 開く時は〜open(ファイルハンドル名,"ファイル名")  閉じる時は〜close(ファイルハンドル名)
open(FILEHANDLE,"data.txt")と記述すると、data.txt内のデータがFILEHANDLEへコピーされます。直接data.txtへアクセスせず、FILEHANDLEのコピーを使う決まりになっています。
read 説明 read関数は、データ(ログファイル)を読み込む関数です。CGIでpostメソッドを使ったフォームデータをデコードする際などに使用されています。これを使用しないとアクセスカウンタ・掲示板・チャットなどは作成できません。 ※ファイルハンドル名はお好きなものに換えて下さい。
記述 外部ファイルを読み込む〜スカラー変数1=read(ファイルハンドル,外部ファイルパス)
$abc=read(STDIN,./data.txt)と記述すると、同ディレクトリ内にある「data.txt」が読み込まれる。
write 説明 write関数は、フォーマットに従ってファイルハンドルに書き込む関数です。CGIが処理した結果をログファイルに保存する時に使用します。
記述 ファイルハンドルに書き込む〜write(ファイルハンドル名を返す式)
open(IN,"data.txt")と記述すると、data.txtがファイルハンドル「IN」に読み込まれます。それから追加・削除処理を行い、write(IN)と記述すると上書き保存されます。
flock 説明 Web上で2人同時にCGIを使用すると、きちんと処理されない場合があります。(データがクラッシュするため)flock関数は、同時に処理を要求された場合、一方を待たせます。これを「ファイルをロックする」といいます。
記述 ロックする時は〜flock(ファイルハンドル名,ロックする方法);
flock(DATA,2);からflock(DATA,8);の間に出力文を記述する。
【ファイルをロックする方法の種類1〜3】

1:ファイルを共有する(同時に書き込み可能)
2:同時読み込み・書き込みを行わない
3:ロックを解除する
chop
chomp
説明 chop関数は指定したスカラー変数の末尾の一文字を取り除きます。(ちなみに日本語ではうまく動きません)chomp関数は末尾が改行文字だった場合のみ、改行文字を削除してくれます。これは投稿CGIで頻繁に使用される関数です。
記述 末尾削除〜chop(スカラー変数名) 改行削除〜chomp(スカラー変数名)
$data="a,b,c,d";から「d」を削除するにはchop($data)となり、 改行を取る時はchomp($data)となる。
split 説明 ある文字列を、指定した区切り文字で分割して、前から順番に配列の要素として登録する関数です。よく、掲示板などのロブファイルを見ると、「/」で区切られていますね。split関数はその分割と登録を行います。
記述 文字列の分割〜split(/区切り文字/,分割する文字列,分割する数)〜分割する数は指定しません。
一人一人の保存データを改行で区切りたい場合は、split(/\n/,$data)とします。
sprintf 説明 文字列を、あるフォーマットにのっとって整形する関数です。「変数名=sprintf("フォーマット",文字列);」のように使います。
記述 文字列を整形する〜sprintf("フォーマット",文字列や数値)
$data=splintf("%07d",253)と記述すると、対象文字253が右揃え7桁の整数に整形されます。

【追加の効果を持たせる文字】

文 字 意 味
+ 正の値の時に「+」を付ける
- 左揃えにする
0 右揃えにするため数値に「0」を付ける
スペース 右揃えにするため数値に「スペース」(空白)を付ける
# 8進数の時は「0」,16進数の時には「0x」を付ける
数値 正の整数の桁数
.数値 少数点以下の桁数

【フォーマットの書式】

書 式 意 味
c 文字
d 10進整数
e 浮動少数点数(指数形式)
f 浮動少数点数(固定少数点形式)
g 浮動少数点数(コンパクト形式)
ld 10進整数(long)
lo 8進整数(long)
lu 符号なし10進整数(long)
lx 16進整数(long)
o 8進整数
s 文字列
u 符号なし10進整数
x 16進数
X 16進数(大文字を使用)
関数名 項 目 詳 細
※これらの英数字の前に「%」を付けます。「c」は「%c」となります。「%」と英文字の間に追加効果を持たせる文字を記述します。
push
pop
説明 配列の要素の末尾を足したり削ったりする関数です。push関数は配列の要素の末尾(一番右端)に要素を足します。pop関数は、配列の要素の末尾にある要素を削除します。
記述 末尾に要素を足す時は〜push=(配列名、足したい要素) 末尾の要素を削る時は〜pop(配列名)
配列@data = (1,2,3)に要素(4)を足す時は〜push(@data,4)  配列の末尾の要素を削る時は〜pop(@data);
unshift
shift
説明 配列の要素の先頭を足したり削ったりする関数です。unshift関数は配列の要素の先頭(一番左端)に要素を足します。shift関数は、配列の要素の先頭にある要素を削除します。
記述 先頭に要素を足す時は〜unshift=(配列名、足したい要素) 先頭の要素を削る時は〜shift(配列名)
配列@data = (2,3)の先頭に要素(1)を足す時は〜unshift(@data,1)  配列の先頭の要素を削る時は〜shift(@data);
rand
srand
int
説明 これらはランダムに何かをする関数です。ランダムにリンクを張る/ランダムに画像を表示といったことが出来ます。掲示板やフォームなどでは使用しませんが、オマケとして覚えましょう。
記述 0以上10未満の乱数を発生させる〜rand(10);
複雑な乱数を発生させる〜srand(time());〜常に動く時間を乱数の元として割り当てます。
少数を切るint(rand(10));〜ランダムリンク・ランダム画像時は小数点を切り捨てなければならない。
substr 説明 ある文字を取り出す関数です。「長さ」の部分は省略出来ます。日本語は1文字を2文字として計算する為、substr("あいうえおかきくけこ",4,6)では、4〜6番目の要素「う〜お」が取り出されます。
記述 文字を取り出すには〜substr(元となる文字列,スタート位置,長さ)
$data="明日は休みです";  substr($data,6,4)="出社";
$dataの出力結果は「明日は出社です」となります。
reverse 説明 配列の要素を逆にする関数です。掲示板などに投稿すると、新しいデータは必然的に古いデータの後ろに保存されます。これをreverse関数で逆にすれば、「新規投稿順」として出力されます。
記述 要素を逆にするには〜reverse(配列名)
@data=(1,2,3);  @data_b=reverse(@data);とすると、@dataの出力結果は「3,2,1」となります。
unlink
rename
説明 unlinkは、ファイルを削除する関数です。renameは、ファイル名を変更する関数です。プログラムによりファイルを新規作成させたい場合は、open関数を使用します。
記述 ファイルを削除〜unlink("ファイル名")
ファイル名を変更〜rename("古いファイル名","新しいファイル名")
mkdir
rmdir
chdir
説明 unix(サーバ)では、フォルダの事をディレクトリといいます。mkdirは、ディレクトリを作る関数です。rmdirは、ディレクトリの削除する関数です。chdirは、作業を行うディレクトリを変更する関数です。
記述 ディレクトリ作成〜mkdir("ディレクトリ",パーミッション)
ディレクトリ削除〜rmdir("ディレクトリ名")
ディレクトリ変更〜chdir("作業を行うディレクトリ名")
※mkdir("new_file",0755)と記述すると、新しいディレクトリ「new_file」が作成されます。(パーミッション755として)
※rmdir("new_file")と記述すると、new_fileが削除されます。(ディレクトリに何も入っていない場合のみ)
※chdir("new_file")と記述すると、new_fileが作業用ディレクトリとなります。