フリーソフトウェア・フリーCGIと、パソコンTipsと、おたくコンテンツ...
にしし ふぁくとりー (西村文宏 個人サイト)
Powered by Google
HOMEProductsPC TipsPrivatesBooksInfoLinks
(カウンタ)

にししの Perl/CGI Tips ふぁくとりー

Perlを使ったCGIの作成に関する、ちょっとしたTIPSをご紹介しています。 既存CGIのカスタマイズから、CGI改造・新しいCGIの作成などにお役に立つかも知れません。(^^;)
私が今までにPerlでCGIを作成してきた中で、いろいろ便利だと思ったソースコードなどを掲載しています。
ここでご紹介するソースやサンプルCGIは、すべて使用フリーですので、ご自由にご活用下さい。 もっと良いテクニックがあれば、ぜひ教えて下さい。(^^;)

日付関連TIPS

配列関連TIPS

サブルーチン関連TIPS

文字列操作関連TIPS

ファイル操作関連TIPS

Perlスクリプト全般のTIPS


各カテゴリの新着TIPS

各カテゴリの新着TIPSを、1つずつ掲載しています。

日付関連TIPS

日付から曜日を割り出す

ある日付が一体何曜日なのか知りたいと思うことはありませんか? 計算で求めなくても、Perlの2つの関数を使えば、西暦で日付を指定するだけで曜日を得ることができます。

SOURCE 1

timelocal関数で西暦をエポック秒に変換し、localtime変数で各種日付情報に戻します。その際、曜日情報も得られます。
use Time::Local;
$time = timelocal($sec, $min, $hours, $mday, $mon - 1, $year);
($sec,$min,$hour,$mday,$mon,$year,$wday,$dmy) = localtime($time);
@wdays = ("日","月","火","水","木","金","土");
print "$year年$mon月$mday日は、" . $wdays[$wday] . "曜日です。\n";
timelocal関数を使うためには、最初に「use Time::Local;」と書いておく必要があります。

SOURCE 2

もっと短く書けば次のようになります。
$wday = localtime( timelocal(0, 0, 0, $mday, $mon - 1, $year) )[6];
@wdays = ("日","月","火","水","木","金","土");
print "$year年$mon月$mday日は、" . $wdays[$wday] . "曜日です。\n";
timelocalの返り値を変数に代入せずに、直接 localtimeの引数に渡しています。また、localtimeの返り値はたくさんあるので、そのうち必要な1つだけを得られるよう [6] を加えています。

SAMPLE SOURCE

2004/02/18. Wed.

配列関連TIPS

配列の中身すべてに対してループで何か処理をする

配列に格納したデータすべてに対して、ループを回して何か処理をしたい場合が良くあります。 配列の長さを取得して for文で回す…という手が他の言語ではよく使われるでしょうが、Perlにはもっと便利な foreach文があります。

SOURCE 1

foreach の使い方はとても簡単。「foreach 変数 ( 配列 )」です。
@moes = ("sakura", "tomoyo", "misaki", "rakka", "sora");
foreach $moe ( @moes ) {
print "名前:$moe\n";
}
配列 @moes の中身が $moe に入ります。@moes に要素があるだけループが回ります。配列の長さを調べる必要がないので楽ですね。

SOURCE 2

配列の番号が必要になる場合は、for文を使って次のように書けます。
@moes = ("sakura", "tomoyo", "misaki", "rakka", "sora");
for( $loop=0 ; $loop <= $#moes ; $loop++ ) {
$num = $loop+1;
print "$num人目の名前:$moes[$loop]\n";
}
配列の最後の要素番号が $#配列名 で分かります。また、配列 @moes の特定の要素は $moes[番号] で得られます。

SAMPLE SOURCE

2004/02/19. Thu.

サブルーチン関連TIPS

サブルーチンに渡された引数を得る

サブルーチンに渡された引数は、すべてまとめて @_ 配列に格納されています。 ですから、引数を受け取るには、この @_ 配列の中身を見れば良いわけです。

SOURCE 1

名前が特別ですが、通常の配列と同じですので、通常の配列を扱うように扱えます。
例えば、 shift を使って、1個ずつ取り出す方法があります。
sub subroutine {
$param1 = shift @_;
$param2 = shift @_;
$param3 = shift @_;
:::
}
shiftを使えば、配列の先頭の要素から1つずつ抜き出すことができます。

SOURCE 2

1つずつ抜き出すような面倒なことをせずに、一気に全部抜き出すこともできます。
( $param1, $param2, $param3 ) = @_;
上記の場合は、引数が3つある場合です。いくつでも増やせます。必要なだけ列挙すれば良いわけです。

SOURCE 3

引数が1個しかないのなら...
$param = @_;
こういう書き方もできますね。(^^;)
2004/02/20. Fri.

文字列操作関連TIPS

文字列を、特定の文字で分割する

カンマ区切りの文字列を、カンマで分割したいと思うことは良くあります。カンマの他にもスラッシュやハイフンなど、様々な場合があるでしょうね。 そのどんな場合にも使える split という関数があります。

SOURCE 1

split の使い方はとても簡単。「split /パターン/ , (対象文字列)」です。
($first, $second, $third, $fourth ) = split(/,/, $string );
上記は、変数 $string 内の文字列をカンマで区切って、$first 〜 $fourth までの4つの変数に分割して格納しています。

SOURCE 2

($first, $second, $third, $fourth ) = split(/-/, $string );
上記は、ハイフンを区切り文字として分割した場合です。

SOURCE 3

スラッシュを区切り文字にする場合は...
($first, $second, $third, $fourth ) = split(/\//, $string );
スラッシュの前に、「¥」を加えて「\/」と書く必要があります。
2004/02/20. Fri.

Perlスクリプト全般のTIPS

別ファイルのPerlスクリプトにあるサブルーチンを呼び出して使用する

複数のCGIで共通して使いたいサブルーチンなどは、別ファイルに独立させるのがスマートですね。 別ファイルにあるサブルーチンを呼び出して使う仕組みが、Perlには用意されています。

SOURCE 1

まず、呼び出される方のPerlスクリプトに、パッケージ名を付けます。
#! /usr/bin/perl
package samplepackage;
sub function1 {
print "hogehoge\n";
}
1;
上記では、samplepackage というパッケージ名を付けています。そして、function1 というサブルーチンを記述しています。
また、最後に必ず「真」を返さないといけない決まりになっているので、ソースの最後に「1;」と書いて、真を返すようにしています。

SOURCE 2

次に、呼び出す方のPerlスクリプト。require '(ファイル名)'; と記述することで、別ファイルのPerlスクリプトを呼び出すことができます。
require 'sample.cgi';
samplepackage::function1();
上記では、sample.cgi というファイルを呼び出して、function1 というサブルーチンを実行しています。
サブルーチンの前に「samplepackage::」という記述がありますが、これを付けることで、「パッケージ samplepackage 内のサブルーチン」という意味になります。
ですから、複数のPerlスクリプトを呼び出して、それぞれに同じ名称のサブルーチンがあったとしても、正しく目的のサブルーチンを呼び出して使うことができます。
2004/02/21. Sat.

このページに記載の内容は、必ずしも正しいとは限りません。ご注意下さい。
もっと良い方法がありましたら、ぜひ、教えて頂けるとありがたいです。
製作者にししへのご連絡は、メールなどでお送り下さい。匿名のコメントも送信できます。
どのページへもリンクは歓迎します。複製・転載はご遠慮下さい。

[Your access date]2016”N12ŒŽ10“ú [Modified date]2007”N04ŒŽ17“ú