Perl入門   No.13


4.8.2 unless 〜 else 文
 
もし条件に合わないならば処理をする。
if 文とは条件が逆。
unless(条件){
   処理;
}
 
上記の例で if を unless に書き換えて試してみましょう。
#!/usr/bin/perl

何か数字を入れてください:
$a = <STDIN>;

unless( $a == 1){
  print " $a 以外が入力されました。\n";
}
unless( $a == 1){
  print " $a は正数です。\n";
}
unless($a == 2){
  print "入力数字は2以外です。\n";
elsif($a < 5){
  print " 入力数字は5以下です。\n";
}
else{
  print "入力数字は、5以上です\n";
}
 
4.8.3 ループ
 
ファイル内容を1行ずつ読み込んだり(後述)、配列を効果的に使うときなどに多用します。
 
4.8.3.1 for 文
for(最初の状態 ; 終了の条件 ; 継続の状態){
  処理;
}
 
例  実際に試してみましょう。  配列、インクリメント演算子、.演算子 使用
#!/usr/bin/perl

@hairetu=("道長","尊氏","信長","秀吉","家康","慶喜" );

for($a = 0 ; $a < 6 ; $a++ ){
    print "\@hairetu[$a]=".@hairetu[$a]."\n" ;
}
 
for( ; ; ) とすると、無限ループになります。
 
4.8.3.2 foreach() 文
 
使用する変数をここだけで使いたい場合(超ローカル)に用います。
foreach 変数 (配列){
   処理;      # この中の変数は、配列リテラルに従って代入される
}
 
#!/usr/bin/perl

@hairetu = (1,2,3,4);
foreach $a (@hairetu){
  print $a;
 }
を実行してみましょう。
 
例えば、アクセス数を表示するカウンターをグラフィック的に処理するSSI プログラムのもっとも簡単な方法で、
 
アクセス数  $number = 123; の場合、
まず123という3桁の数字をそれぞれ、「1」「2」「3」と分解します。
(分解には、split 関数を用いますが、詳しくは別の参考書を見てください。)
@count = split(//,$number);
 
@count の中身は、次と同じ内容になります。
@count = (1,2,3);
 
この「1」「2」「3」にそれぞれカウンターらしい画像をつけるには、
print "<img src=\"1.gif\">";
print "<img src=\"2.gif\">";
print "<img src=\"3.gif\">";
 
とすればいいのですが(1.gif・・・は、数字の書いた画像ファイル)、それをまとめて記述するときにこのforeach()文を用います。
foreach $num (@count){
   print "img src=\"$num.gif\">";
}
 
処理が終了すると、変数 $num にはこの時の数値は残りません。そして再び @count の数値が変数 $num に代入されていきます。