Software Engineering Lecture 7/7

Software Engineering Lecture 7/7

先週の復習

マルチユーザカードゲームの状態モデルを作成した。 また、分散プログラミングについての若干勉強した。



Perlの入力の仕方

perl を起動して、 print 1+2として CTRL-Dを入力してみよう。
% perl
print 1+2
3%
perlというコマンドと、 print 1+2というプログラムを一行で書くことができる。
% perl -e  'print 1+2'
3%
コマンドにするなら、
% alias calc 'echo print \!* | perl -l'
-lを付け加えるので十分だ。

典型的なプログラム

もっとも短い典型的なPerlプログラムはこんな感じだ。
while(<>) {                           # 一行ずつ終わりまで読み込んで
   print;                             # それを、そのままプリントする
}


ファイルに含まれるいちばん長い行の長さ

 一つのファイルの一行の長さの最大値を与えるプログラムを考えてみよう。
while(<>) {
   $len = length;
   $max = $len if($len > $max);
}
print $max, "\n";
 一行の長さを $lenにとり、それが $maxよりも大きかったら{\tt $max}を入れ換える。基本的な条件判断を以下のように一行ですましている。
   $max = $len if($len > $max);
このように、一つの文の終わりに「もし $len > $maxだったら」とい う条件をつけられる。なんか英語っぽくない気もするが、 unlessという のも使えるので、そちらの方は英語らしくなる。
   $max = $len unless ($len <= $max);


UNIXのファイルをMS-DOSファイルに変換する

 たとえばUNIXのファイルをMS-DOSのファイルに変換したいとしよう。それに は文末の「 \n」(newlineを表わす値10の文字)を「 \r\n」(行 頭へのreturnを表わす値13の文字)に置き換えてやればよい。この置き換えに は、 s/\n/\r\n/;という文を使う。「 $\_」の最初の「 /」か ら「 /」までの部分を二つめの「 /」から「 /」まで置き換 えるという意味だ。最初の「 /」から「 /」までの部分はパターンという。パターンにはもっと複雑なものも書けるのだがそれはまたあとで調べることにしよう。マニュアルで探すときはPATTERNで探すことができる。  これに while(<>) { }をつければよいのだが、もし、たんに一行一行 変換する処理をしたいのなら、もっと簡単に perl -pを使うことができる。
perl -pe 's/\n/\r\n/'
これで自動的に一行ずつ読み込んで置換して printをしてくれる。これは、
while(<>) {
  s/\n/\r\n/;
  print;
}
と同じである。もっと簡単には、
while(<>) {
   chop; print; print "\r\n";
}
さらになんとPerlのオプションには printしないループをつくってくれ る -nと自動的に chopをする -lというのがあるので、
perl -nle 'print "$_\r\n"'
ということになる。

カードゲームのADFDの作成

カードゲームの以下の状況についてADFDを作成せよ

今回は宿題はなしとします。今までの提出物をちゃんと提出すること。