職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

CGIの書き方/perl

2018年02月22日 | perl
CGIの書き方/perl


【環境条件】
Eclipse 4.4(ルナ)
XAMPP 1.8.3 
Perlは既にインストール済み
CGIを使用する時は、必ずApachを起動する

参照サイト→Perl/CGIの基礎講座

【HTMLを表示するCGIプログラム】
「html.cgi」のプログラム

#!/usr/local/bin/perl← Perl のパス指定

# CGI ヘッダー
print "Content-type: text/html\n\n";←"Content-type: text/html\n\n"の\nはメタ文字

$ttl = 'HTMLの出力'; ←変数

# HTML の出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
print "<html>\n";
print "<head>\n";
print "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n" ;
print "<title>$ttl</title>\n";
print "</head>\n";
print "<body>\n";
print "<h1>$ttl</h1>\n";
print "<p>こんにちは。これはCGIスクリプトで出力したHTML文書の例です。</p>\n";
print "</body>\n";
print "</html>";

【注意】
1)#!/から始まるPerl のパス指定はperl.exeがある所にパスを通す
2)必ず、# CGI ヘッダー(print "Content-type: text/html\n\n")を書いた後は一行空ける

実行

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

EclipseでperlのCGIを開発するには

2018年02月09日 | perl
EclipseでperlのCGIを開発するには


【環境条件】
Eclipse 4.4(ルナ)
XAMPP 1.8.3 
Perlは既にインストール済み
CGIを使用する時は、必ずXAMPPのApachを起動する事
参照サイト→小粋空間

【CGIを作成する】
1、プロジェクト「perl_cgi」を作る


2、プロジェクト「perl_cgi」の下にファル「sample1.cgi」作る



3、ファル「sample1.cgi」をクリックしてプログラムを書く

【プログラム内容】
Shebang 行(シーバン行)←perl.exeにパスを通す(自分の環境に合わせるか、usr/bin/perlを作るか)

#!usr/bin/perl
print "Content-Type: text/html; charset=UTF-8\n\n";
print "<html>";
print "<head><title>サンプル</title></head>";
print "<body>";
print "

初めてのCGI。

";
print "</body>";
print "</html>";
exit;

4、実行
「sample1.cgi」ファイルを右クリックし、そのメニューから「実行」→「実行の構成」をクリックする


5、「実行の構成」の設定
「Perl CGI」をダブルクリックする


6、「メイン」タブの設定
「メイン」タブの「名前」と「プロジェクト」を設定する
名前→適当
プロジェクト→「参照」ボタンを押してプロジェクト「perl_cgi」を選ぶ



7、「Web サーバー」タブの設定

・HTMLルート・ディレクトリー:C:\xampp\htdocs\perl_cgi
・HTML開始ファイル:C:\xampp\htdocs\perl_cgi\sample1.cgi
・CGIルート・ディレクトリー:C:\xampp\htdocs\perl_cgi
上記の様に「参照」ボタンを押して設定する

8、「適用」ボタンを押した後、「実行」ボタンを押す

9、実行表示
Eclipseのコンソール画面に表示され


10、Webが立ち上がる
アドレスバーに「http://localhost:5003/sample1.cgi」を記入


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ファイル操作

2018年01月30日 | perl
ファイル操作

【環境条件】
Eclipse 4.4(ルナ)
XAMPP 1.8.3 
Perlは既にインストール済み

【ファイル操作】
■基本
1)ファイルハンドル
・ファイルハンドル→コネクションを区別するためにコネクションに対して付ける名前を指す
・コネクション→ファイルとPerlのプログラムの間でやり取りを行うための通信経路(コネクション)の事。
Perlプログラムではコネクションを使わないとファイル操作が出来ない。

2)ファイルハンドル名の付け方
変数名にはアルファベット・数字・アンダーバー("_")を使うことが出来ます
(例) name, old20, _hokan

先頭の文字に数字は利用できません
(例) 10kago は不可

大文字と小文字は区別します。
(例) old と Old は別の変数名となります

3)標準で用意されているファイルハンドル
STDIN 標準入力。キーボードからの入力など。
STDOUT 標準出力。画面への出力など。
STDERR 標準エラー。エラーとしての出力。

■ファイルのオープンとクローズ
書式
オープン
open(ファイルハンドル名, "ファイル名");
open(ファイルハンドル名, "モード", "ファイル名");
クローズ
close(ファイルハンドル名);

サンプル「file01.pl」
use strict;
use warnings;

if (open(DATAFILE, "data.txt")){
print "data.txtを開く事に成功しました\n";#ファイルハンドル名はDATAFILE

if (close(DATAFILE)){
print "data.txtを閉じる事に成功しました\n";
}else{
print "data.txtを閉じる事に失敗しました\n";
}
}else{
print "data.txtを開く事に失敗しました\n";
}

if (open(DATAFILE, "data1.txt")){
print "data1.txtを開く事に成功しました\n";

if (close(DATAFILE)){
print "data1.txtを閉じる事に成功しました\n";
}else{
print "data1.txtを閉じる事に失敗しました\n";
}
}else{
print "data1.txtを開く事に失敗しました\n";
}
結果


■ファイルオープン時のエラー処理
「open」関数を使ってファイルを開こうとして失敗した場合、プログラムの実行を中断するには「die」関数を使ってプログラムを終了させる方法がよく使われる。

サンプル「file02.pl」
use strict;
use warnings;
open(DATAFILE, "data.txt") or die("error :$!");
print "data.txtを開く事に成功しました\n";

close(DATAFILE);

open(DATAFILE, "data1.txt") or die("error :$!");
print "data1.txtを開く事に成功しました\n";

close(DATAFILE);

・結果
data.txtを開く事に成功しました
error :No such file or directory at C:/xampp/htdocs/perl_kurikaesi/file.pl line 35.

■テキストデータを読み込む
サンプル「file03.pl」
use strict;
use warnings;
open(DATAFILE, "< data4-1.txt") or die("Error:$!");

while(my $line = <DATAFILE>){
chomp($line);
print "$line\n";
}
テキストファイル「data4-1.txt」
東京
Tokyo

・結果
東京
Tokyo

■テキストデータを書き込む
サンプル「file04.pl」
use strict;
use warnings;
open(DATAFILE, ">> data5-1.txt") or die("Error:$!");

print DATAFILE "大阪\n";
print DATAFILE "Osaka\n";

下記のように「data5-1.txt」に記入される


【モードの指定】
1)「<」モード(読み込み)
書式
open(ファイルハンドル, "< ファイル名");
open(ファイルハンドル, "<", "ファイル名");

・サンプル「file05.pl」
use strict;
use warnings;
open(DATAFILE, "<", "data.txt") or die("Error:$!");

while(my $line = <DATAFILE>){
chomp($line);
print "$line¥n";
}

close(DATAFILE);

・テキストサンプル「data.txt」
これはテストです

・実行
「これはテストです」

2)「>」モード(書き込み)
書式
open(ファイルハンドル, "> ファイル名");
open(ファイルハンドル, ">", "ファイル名");

・サンプル「file05.pl」
use strict;
use warnings;
open(DATAFILE, ">", "data1.txt") or die("Error:$!");

print DATAFILE "加藤 花子\n";
print DATAFILE "東京都新宿区\n";
print DATAFILE "女性";

close(DATAFILE);

open(DATAFILE, ">", "data1-1.txt") or die("Error:$!");

print DATAFILE "山崎 一郎\n";
print DATAFILE "大阪府吹田市\n";
print DATAFILE "男性";

close(DATAFILE);

・実行
data1.txtにデータが書き込まれる
加藤 花子
東京都新宿区
女性

また
無いdata1-1.txtにはデータが書き込まれない

3)「>>」モード(書き込み)
open(ファイルハンドル, ">> ファイル名");
open(ファイルハンドル, ">>", "ファイル名");
「>>」モードの場合
・書き込み専用
・ファイルが存在していた場合、ファイルを開いた時にファイルの内容を変更しない
・ファイルが存在してなかった場合、新規にファイルを作成

・サンプル「file06.pl」
use strict;
use warnings;
open(DATAFILE, ">>", "data.txt") or die("Error:$!");

print DATAFILE "加藤 花子\n";
print DATAFILE "東京都新宿区\n";
print DATAFILE "女性";

close(DATAFILE);

open(DATAFILE, ">>", "data1-1.txt") or die("Error:$!");

print DATAFILE "山崎 一郎\n";
print DATAFILE "大阪府吹田市\n";
print DATAFILE "男性";

close(DATAFILE);

・実行
data.txt→データが追加される
これはテストです加藤 花子
東京都新宿区
女性

data1-1.txt→新規作成されデータが書き込まれる
山崎 一郎
大阪府吹田市
男性

4)「+<」モード(読み書き)
書式
open(ファイルハンドル, "+< ファイル名");
open(ファイルハンドル, "+<", "ファイル名");
・サンプル「file06.pl」
use strict;
use warnings;
open(DATAFILE, "+<", "data9-1.txt") or die("Error:$!");
print DATAFILE "加藤 花子";
close(DATAFILE);

open(DATAFILE, "+<", "data9-1.txt") or die("Error:$!");
print "変更後:\n";
while(my $line = <DATAFILE>){
chomp($line);
print "$line\n";
}
close(DATAFILE);

open(DATAFILE, "+<", "data9-2.txt") or die("Error:$!");→存在しないのでエラー
print DATAFILE "加藤 花子\n";
print DATAFILE "東京都新宿区\n";
print DATAFILE "女性";

close(DATAFILE);
・実行
変更後:
加藤 花子
東京都杉並木区
男性
Error:No such file or directory at

5)「+>」モード(読み書き)
書式
open(ファイルハンドル, "+> ファイル名");
open(ファイルハンドル, "+>", "ファイル名");
・読み込み、書き込みの両方とも可
・ファイルが存在していた場合、ファイルを開いた時にファイルサイズを0にする
・ファイルが存在してなかった場合、新規にファイルを作成

・サンプル「file07.pl」
use strict;
use warnings;
open(DATAFILE, "+>", "data9-1.txt") or die("Error:$!");
print DATAFILE "加藤 花子\n";
print DATAFILE "東京都新宿区\n";
print DATAFILE "女性";
close(DATAFILE);

open(DATAFILE, "<", "data9-1.txt") or die("Error:$!");
print "追加後:\n";
while(my $line = <DATAFILE>){
chomp($line);
print "$line\n";
}
close(DATAFILE);

open(DATAFILE, "+>", "C:/Perl/data9-2.txt") or die("Error:$!");
print DATAFILE "山崎 一郎\n";
print DATAFILE "大阪府吹田市\n";
print DATAFILE "男性";

close(DATAFILE);

実行
data9-1.txtに書き込めれた後読み込まれる
追加後:
加藤 花子
東京都新宿区
女性

C:/Perl/data9-2.txtには
山崎 一郎
大阪府吹田市
男性
が書き込めれる

6)「+>>」モード(読み書き)
書式
open(ファイルハンドル, "+>> ファイル名");
open(ファイルハンドル, "+>>", "ファイル名");

・読み込み、書き込みの両方とも可
・ファイルが存在していた場合、ファイルを開いた時にファイルの内容を変更しない
・ファイルが存在してなかった場合、新規にファイルを作成
・ファイルポインタは最後

・サンプル「file08.pl」
use strict;
use warnings;
open(DATAFILE, "+>>", "data11-1.txt") or die("Error:$!");
print "追加前:\n";

while(my $line = <DATAFILE>){
chomp($line);
print "$line\n";
}

print DATAFILE "加藤 花子\n";
print DATAFILE "東京都新宿区\n";
print DATAFILE "女性";

close(DATAFILE);

open(DATAFILE, "+>>", "data11-1.txt") or die("Error:$!");

print "追加後:\n";

while(my $line = <DATAFILE>){
chomp($line);
print "$line\n";
}

close(DATAFILE);

open(DATAFILE, "+>>", "C:/Perl/data11-2.txt") or die("Error:$!");

print DATAFILE "山崎 一郎\n";
print DATAFILE "大阪府吹田市\n";
print DATAFILE "男性";

close(DATAFILE);

・実行
追加前:
追加後:

data11-1.txt
山田太郎
東京都杉並区
男性
加藤 花子→追加される
東京都新宿区
女性

C:/Perl/data11-2.txt
山崎 一郎
大阪府吹田市
男性


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

「printf」関数と「sprintf」関数の違い

2018年01月27日 | perl
「printf」関数と「sprintf」関数の違い

【環境条件】
Eclipse 4.4(ルナ)
XAMPP 1.8.3 
Perlは既にインストール済み

【文字列を指定のフォーマット】
1)フォーマット
printf関数→指定のファイルハンドルに対して整形した結果の文字列を出力
sprintf関数→整形した結果を文字列として返す

2)書式
printf([ファイルハンドル] 書式指定文字列, リスト);
戻り値 = sprintf(書式指定文字列, リスト);

サンプル「test01.pl」
use strict;
use warnings;
printf("番号は %03d です\n", 24);%はフォーマット指定子
・結果
番号は 024 です

3)フォーマット指定子
%[フラグ][最小幅][.精度/最大幅]型指定子
「%03d」→対応する値を「10進数の数値で幅を3桁にし0詰めにする」

サンプル「test01.pl」
use strict;
use warnings;
printf("Aは %03d 円、Bは %03d 円です\n", 30, 80);
・結果
Aは 030 円、Bは 080 円です

4)指定子の種類
・型指定子

・数値のデータ型以外の型指定子


5)フラグ
フラグ→フォーマット指定子のオプション
%[フラグ][最小幅][.精度/最大幅]型指定子


サンプル「test02.pl」
use strict;
use warnings;
printf("[%d]\n", 30);
printf("[% d]\n", 30);
printf("[% d]\n", -30);

printf("[%d]\n", 30);
printf("[%+d]\n", 30);
printf("[%+d]\n", -30);

printf("[%4d]\n", 30);
printf("[%-4d]\n", 30);

printf("[%4d]\n", 30);
printf("[%04d]\n", 30);

printf("[%#o]\n", 30);
printf("[%#x]\n", 30);
printf("[%#b]\n", 30);

・結果
[30]
[ 30]
[-30]
[30]
[+30]
[-30]
[ 30]
[30 ]
[ 30]
[0030]
[036]
[0x1e]
[0b11110]

6)最小幅
文字列の最小の幅を指定
%[フラグ][最小幅][.精度/最大幅]型指定子

サンプル「test03.pl」
use strict;
use warnings;
printf("[%d]\n", 30);
printf("[%5d]\n", 30);
printf("[%5d]\n", -30);
printf("[%-5d]\n", -30);
printf("[%#o]\n", 30);
printf("[%#5o]\n", 30);
printf("[%#x]\n", 30);
printf("[%#5x]\n", 30);
printf("[%#b]\n", 2);
printf("[%#5b]\n", 2);
printf("[%15e]\n", 12.3);
printf("[%15f]\n", 12.3);
printf("[%3d]\n", 760128);

・結果
[30]
[ 30]
[ -30]
[-30 ]
[036]
[ 036]
[0x1e]
[ 0x1e]
[0b10]
[ 0b10]
[ 1.230000e+001]
[ 12.300000]
[760128]

7)精度/最大幅
浮動小数点数に対して精度を指定した場合は、小数点以下の桁数となる。
%[フラグ][最小幅][.精度/最大幅]型指定子

サンプル「test04.pl」
use strict;
use warnings;
printf("%f\n", 0.012);
printf("%.4f\n", 0.012);
printf("%e\n", 0.012);
printf("%.3e\n", 0.012);

printf("[%.4d]\n", 123);
printf("[%.6d]\n", 123);
printf("[%8.6d]\n", 123);

printf("[%.6x]\n", 123);
printf("[%#.6x]\n", 123);

printf("[%s]\n", "Javascript");
printf("[%.5s]\n", "Javascript");

・結果
0.012000
0.0120
1.200000e-002
1.200e-002
[0123]
[000123]
[ 000123]
[00007b]
[0x00007b]
[Javascript]
[Javas]

8)精度/最大幅の桁数を値で指定
printf("[%.*d]¥n", 6, 123);

サンプル「test05.pl」
use strict;
use warnings;
printf("[%.6d]\n", 123);
#桁数を直接、値で指定
printf("[%.*d]\n", 6, 123);
printf("[%s] [%.*s] \n", "Hello", 3, "Hello");

・結果
[000123]
[000123]
[Hello] [Hel]

8)値をインデックス指定で使用
値のインデックスを指定することで、任意の位置の値を使用する方法を確認します
・書式
printf(" A=%2¥$d, B=%1¥$d¥n", 123, 456);

サンプル「test06.pl」
use strict;
use warnings;
printf(" A=%d, B=%d\n", 123, 456);
printf(" A=%2\$d, B=%1\$d\n", 123, 456);
printf(" A=%2\$d, B=%2\$d\n", 123, 456);
printf("%2\$d, %d, %1\$d, %d\n", 123, 456);

・結果
A=123, B=456
A=456, B=123
A=456, B=456
456, 123, 123, 456
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

perlとサブルーチン

2018年01月22日 | perl
perlとサブルーチン


【環境条件】
Eclipse 4.4(ルナ)
XAMPP 1.8.3 
Perlは既にインストール済み

【サブルーチン】
サブルーチン→プログラム中で何回も使用するコードをサブルーチンとして独立し、必要に応じて呼び出すことでプログラムを簡素化して見やすくする。

・サンプルプログラム「test01.pl」
use strict;
use warnings;
my @city = ("東京", "大阪", "名古屋");
&dispArrayValue(@city);
#逆順
my @rcity = reverse(@city);
&dispArrayValue(@rcity);

sub dispArrayValue{
my @array = @_;

print "配列の要素を出力します\n";
foreach my $var(@array){
print "$var\n";
}
}
・結果
配列の要素を出力します
東京
大阪
名古屋
配列の要素を出力します
名古屋
大阪
東京

2)サブルーチンの定義
書式
sub サブルーチン名{
実行する処理;
}

位置
サブルーチンの位置はプログラム中のどこで定義しても構いませんが、一般的には最初か、最後に置く

サブルーチンの実行
プログラム内からサブルーチンを呼び出さない限り実行されません。

・サンプルプログラム「test02.pl」
use strict;
use warnings;
#サブルーチン
sub hello{
print "hello\n";
}

print "サブルーチンのテスト\n";

#サブルーチン
sub bye{
print "bye\n";
}

&hello;
&bye;
print "終了\n";

・結果
サブルーチンのテスト
hello
bye
終了

3)引数
サブルーチンを呼び出す時に、複数の値を渡す時に使用する。
書式
&サブルーチン名(引数1, 引数2, ...);

sub サブルーチン名{
実行する処理;
}

・サンプルプログラム「test03.pl」
use strict;
use warnings;
&calcAverage(10, 8);
&calcAverage(5, 17);

#サブルーチン
sub calcAverage{
my $ave;
$ave = ($_[0] + $_[1]) / 2;
print "$_[0] と $_[1] の平均値は $ave です\n";
}

・結果
10 と 8 の平均値は 9 です
5 と 17 の平均値は 11 です

4)引数を任意の変数に格納
サブルーチン側では、呼び出し元から渡されてきた引数をデフォルトの配列変数「$_」に格納します
・サンプルプログラム「test04.pl」
use strict;
use warnings;
&personal("加藤", 25, "東京都");

sub personal{
my ($name, $old, $address) = @_;#配列

print "名前は $name です\n";
print "年齢は $old です\n";
print "住所は $address です\n";
}
・結果
名前は 加藤 です
年齢は 25 です
住所は 東京都 です

5)戻り値
サンプル「test05.pl」
use strict;
use warnings;

my ($sum, $str);

$sum = &calcTwoNum(10, 23);#戻り値
print "$sum\n";

$sum = &calcTwoNum(32, 14);#戻り値
print "$sum\n";

sub calcTwoNum{
my ($num1, $num2) = @_;

$num1 + $num2;
}
・結果
33
46

6)return文
サブルーチンではブロックの最後まで処理が進むと呼び出し元に返りますが、任意の位置で即座に呼び出し元に処理を返すことが出来る
サンプル「test06.pl」
use strict;
use warnings;
my $msg;

$msg = &hantei(72, 84);
print "$msg\n";

$msg = &hantei(92, 80);
print "$msg\n";

sub hantei{
my ($kokugo, $suugaku) = @_;

if ($kokugo < 75){
return "不合格";
}

if ($suugaku < 75){
return "不合格";
}

return "合格";
}


・結果
不合格
合格
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする