Search A.I.
Menu
ホーム

メールマガジン ホームページプログラミングテク

Windowsテク
Javaアプレット サンプル
Java Q & A
JavaScript Q & A
Perl Q & A
Perl レッスン
PHP レッスン
PHPテク
MS-DOS コマンド集
UNIX コマンド集
SQL コマンド集
SEの基礎講座
WEBシステム開発受注します
]無料フォームメール送信サービス
リンク集
Perl レッスン

1. Perl の基礎
2. Perlの文法、条件式
3. Perlの文法、条件式 - 続き
4. 配列について
5. ハッシュ配列について
6. Perlの基礎 - 続き
7. 関数について
8. 関数について - 続き
9. 文字列操作関数
10. 配列操作関数
11. ファイル操作
12. ファイル操作 - 続き
13. パラメータの受け渡し
14. クッキーについて
15. 総合練習
16. メール送信
17. ファイルアップロード
18. パッケージの使用方法
19. MySQL
20. MySQL - 続き(1)
21. MySQL - 続き(2)
22. PostgreSQL
23. 総合練習
24. 総合練習解答



2. Perlの文法、条件式

今日は、Perlの文法、条件式について簡単に説明していきます。

■条件式
if文やfor文などの条件に使用する式は以下のようなものがあります。

== 等しい
!= 等しくない
< より小さい
> より大きい
<= 以下
>= 以上

eq 文字列比較 - 等しい ( equal イコール )
ne 文字列比較 - 等しくない ( not equal ノットイコール )
lt 文字列比較 - より小さい ( less than レスザン )
gt 文字列比較 - より大きい ( greater than グレーターザン )
le 文字列比較 - 以下 ( less than or equal レスザンまたはイコール )
ge 文字列比較 - 以上 ( greater than or equal グレーターザンまたはイコール )

and かつ (論理積)
or または (論理和)
not 否定
&& and と同じ
|| or と同じ
! not と同じ

条件文で変数の中を比較したり、大小を判定する時に使用します。

■if () 文 判定
if文は、プログラムでもっともよく使用する条件判定です。

if (条件1) {
条件1が真のとき
}
elsif (条件2) {
条件2が真のとき
}
else {
条件1も条件2も偽のとき
}

条件文の結果が 1, 2 などの数値の場合は、真 と同じ扱いになります。
0 の場合は 偽 となります。

-----------------------------------------------------------------
$a = 1;
if ($a == 1) { $b = 2; }

if ($a == 1) {
$b = 2;
}
#上記は両方とも、$a の値が 1 だったら$b に 2 を代入する

if ($a) {
# $a が 2 でも真になるので注意
$b = 2;
}
else {
# $a が 0 の場合はこちらが実行される
$b = 4;
}

if ($a == 1 && $b == 2) {
# $a が 1 で、なおかつ $b が 2 の時にこちらが実行される
$c = 1;
}

$a = 'test';
if ($a eq 'test') {
# $a が文字列「test」ならばこちらが実行される
$c = 1;
}

if ($a ne 'error') {
# $a が「error」でなければこちらが実行される
$c = 1;
}
-----------------------------------------------------------------

■for () ループ
for文は、ある条件まで初期値から、一定の増分でループさせたい場合に使用します。

for (初期値; 条件; 増分) {
last; # ループ脱出
next; # 次のループへ
}

条件が偽になるまで、{} 内を繰り返し実行します。
始めに初期値の部分が実行され、{} 内の最後まで実行された後、増分の部分が実行
されます。

-----------------------------------------------------------------
for ($i = 1; $i <= 10; $i++) {
# $i を 1 から 10 までループさせ、カッコ内を実行する
$a[$i] = 2;
}

for ($i = 1, $j = 1; $i <= 10 and $j >= 0; $i++, $j++) {
# 複数の式を書くことも可能
$a[$i] = ++$j;
}

for (;;) {
# 無限ループとなるので、中でループ脱出する条件文を書かなければならならい
}
-----------------------------------------------------------------

無限ループになってしまうと、サーバがダウンしてしまうことがあるので、注意が
必要です。

■foreach () ループ
foreach文は、配列の中身を 0 から最後まで順番に取り出す時に使用します。

foreach (配列変数) {
$_ # 配列要素
last; # ループ脱出
next; # 次のループへ
}

-----------------------------------------------------------------
foreach (@a) {
$_ = 1;
}
-----------------------------------------------------------------

上の文は、@aという配列を 0 から 配列の終わりまでをループし、配列の値に
それぞれ 1 を代入しています。

上の文は、以下の処理と同じになります。

-----------------------------------------------------------------
for ($i = 0; $i <= $#a; $i++) {
$a[$i] = 1;
}
-----------------------------------------------------------------

$#a は 配列の最終添字となるので、$a[0] から $a[9] と配列がある場合、
$#a は 9 となります。

配列については、別の機会に詳しく説明します。

■while () ループ
while文は、ある条件が満たす間、{}内を繰り返し実行します。

while (条件) {
条件が真のときループ
last; #// ループ脱出
next; #// 次のループへ
}

■until () ループ
until文は、ある条件が満たされるまで、{}内を繰り返し実行します。

until (条件) {
条件が偽りのときループ
last; #// ループ脱出
next; #// 次のループへ
}

■do () ループ
do 〜 until文は、ある条件が満たされるまで、{}内を繰り返し実行します。
do 〜 until文の場合は、ループの中身が一度は必ず実行されます。

do {
条件が偽りのときループ
last; #// ループ脱出
next; #// 次のループへ
} until (条件);

■exit 脱出
Perlを途中で終了する場合や、関数を抜ける場合は、以下の文を使用します。

exit; #// Perl 終了
return; #// 関数終了

関数については、別の機会に詳しく説明します。

 

★今日のまとめサンプルプログラム
-----------------------------------------------------------------
#! /usr/local/bin/perl

print "Content-type:text/html\n\n";
print << "END_OF_HTML";
<HTML>
<BODY>
END_OF_HTML

print '[for文]<br>';

@week = ('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat') ;
for ($i = 0; $i <= $#week; $i++) {
print $week[$i] . '<br>';
}

print '<br>[foreachで記述]<br>';

foreach (@week) {
print $_ . '<br>';
}

print '<br>[whileで記述]<br>';

$i = 0;
while ($i <= $#week) {
print $week[$i++] . '<br>';
}

# よくない例
print '<br>[whileの別バージョン]<br>';
$i = 0;
while (1) {
# 無限ループ
print $week[$i++] . '<br>';
if ($i > $#week) {
# 無限ループを脱出
last;
}
}

print << "END_OF_HTML";
</BODY>
</HTML>

END_OF_HTML

exit;
-----------------------------------------------------------------

■解説
いくつかのループの記述方法を書いてみました。すべて同じ配列の中身を表示する
プログラムです。

出力結果は、全部同じになっていますが、記述形式を比較してみてください。

 

★課題
1. 下の文をuntil文を使って、書き直してください。

for ($i = 0; $i < 9; $i++) {
print $i;
}

2. 下の47都道府県を配列に格納し、foreach文を使って、HTML中に出力して
ください。

"北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県",
"茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県",
"新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県",
"静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県",
"奈良県", "和歌山県", "鳥取県", "島根県", "岡山県", "広島県", "山口県",
"徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県",
"熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"

 

★前回の課題の解答
1. 以下の2つの変数の加算、減算、掛け算、割り算、余りの結果をHTML中に出力
してください。
42
19

→下のサンプルを参照してください。

2. 以下の4つの文字列を配列に格納し、HTML中に文字列をつなげて出力してください。
'This'
' is '
'a test '
'program.'

→下のサンプルを参照してください。

-----------------------------------------------------------------
#! /usr/local/bin/perl

print "Content-type:text/html\n\n";
print << "END_OF_HTML";
<HTML>
<BODY>
END_OF_HTML

# 1.の解答例

$a = 42;
$b = 19;

print "$a + $b = ";
print $a + $b;
print '<br>';

print "$a - $b = ";
print $a - $b;
print '<br>';

print "$a * $b = ";
print $a * $b;
print '<br>';

print "$a / $b = ";
print $a / $b;
print '<br>';

print "$a % $b = ";
print $a % $b;
print '<br><br>';

# 2.の解答例

@str = ('This', ' is ', 'a test ', 'program.');
print $str[0] . $str[1] . $str[2] . $str[3];

print << "END_OF_HTML";
</BODY>
</HTML>

END_OF_HTML

exit;
-----------------------------------------------------------------

■解説
$c = $a + $b;
のように結果を格納する変数を作ってももちろんOKです。

配列の部分は今日ご紹介したfor文でループして表示させると楽ですね。




前の章へ 次の章へ


このエントリーをはてなブックマークに追加


OfficeLance

お問い合わせはこちらから