Hatena::Grouparaistudy

iwasekiの日記

2006-09-10

[]スカラーデータ(その5) はてなブックマーク - スカラーデータ(その5) - iwasekiの日記

while制御構造

ifと並ぶお約束のwhileですな。条件が真である間繰り返す。

#!/usr/bin/perl

$count = 0;
while ($count < 10){
        $count +=1;
        print "べ、別にあんたのために$count回もループしてるわけじゃないんだからね?!\n";
}

ツンデレテストプログラム第3弾。

未定義値(undef)

値を何も与えていない変数に入っている値・・・nullみたいな感じ?

色々ポイントがあるみたいなのでまとめ。

  • undefが入っている変数を数値として扱えば0、文字として扱えば空文字として処理する
  • 演算子の多くは、引数が範囲外だったり、意味が無い引数ををわたされるとundefを返す
    • つまり、特別な処理をしない限り0、または空文字が返ってくる
  • printで表示しようとすると警告がでる
  • 警告(-w)を使っている場合、変な使い方してると警告される

defined関数

definedでundefかそうでないかを確認する。標準入力(<STDIN>)が何も入力されていないとundefが返ってくるらしい。

  • undefだったら偽を返し、それ以外の値ならば真を返す

明示的に変数にundefを入れるには

$line = undef; #えらいわかりやすいな!

練習問題

5問全部作ってから答え合わせをした。いくつか基本的なポイントを復習した。

  • 最初の行に-wを入れて警告を表示するようにしよう
#!/usr/bin/perl -w
$pi = 3.14159264
  • 入力されたものはすべてchompするのが原則
chomp ($line = <STDIN>)

入力された文字列を別途入力された数だけ表示するプログラムをこう書いた。

#!/usr/bin/perl

print "文字列を入力してください:";
$char = <STDIN>;
chomp $char;
print "繰り返す回数を入力してください:";
$value = <STDIN>;

while ($count < $value){
        print "$char\n";
        $count += 1;
}

chompをなくして、whileの中のprint文の\nを入れないほうがスマートだってってのもそうなんだけど、そもそもwhileじゃなくてよかった

ってことで作り直した。

#!/usr/bin/perl -w

print "文字列を入力してください:";
$char = <STDIN>;
print "繰り返す回数を入力してください:";
$value = <STDIN>;
print $char x $value;

こっちのほうが美しいね。