|
こんにちは。$_たんだよ。
え、なんて読むのかって、$_ はダラーアンダーバーって読むんだ。(長っ!)
だれか良いネーミングがあったら教えて。(^-^;
というわけで、ここからは私がナビゲートするね。
でわ、
変数
プログラムには一時的に値を保存しておく「変数」というものがあります。
変な数と書きますが、その中身は数ではなく文字でもかまいません。
使い方は小学校で習う一次方程式の□やxと似たような使い方をします。
例えば、
$x = 1;
$y = 2;
$ans = $x + $y;
とすれば、$ansの中身は3になっています。
|
これだけでなんだか計算機のようなことがプログラムで出来ますね。
3種類の変数+α
そして、リファレンスというものが配列変数のような使われ方をします。
リファレンスについてはややこしいので、後で覚えてもらってもかまいません。
複雑なプログラムでなければ無くても大丈夫です。
スカラー変数
普通に「変数」というとスカラー変数のことを指すことが多いです。
スカラー変数とは最初の例で書いたような「1つの記号につき1つの値を持たせる」もの
です。
|
この記号の名前は自分で好きなものをつけてよく、そのルールは以下のとおりです。
- 頭に $ をつける。
- 数字で始まる名前はダメ。
- - は使っちゃダメ。
|
$123abc や $ab-c という名前はだめで、
$abc123 や $ac_c はオッケーです。
値を代入するときには
$x = 1;
$x = "えへへっ☆";
$x = 'えへへっ☆';
|
とします。文字のときには""か''で囲みます。
""と''の違い
""と''の違いはその中の変数を展開するかしないかです。
|
例えば
#!c:/perl/bin/perl
$x = 'はっぱ';
$y = '$xっていいよな<br>';
$z = "$xっていいよね";
print "Content-type: text/html\n\n";
print $y;
print $z;
↓
$xっていいよな
はっぱっていいよね
|
となります。""でくくったほうはその中に変数があれば変数として加味してくれますが、
''でくくったほうは単なる文字列として処理します。
""で変数が他の文字と混じってしまう
変数が他のアルファベットとくっついてしまうときには{}でくくります。
#!c:/perl/bin/perl
print "Content-type: text/html; charset=Shift_JIS\n\n";
$x = "ポーション";
$y = "${x}EX";
print $y;
↓
ポーションEX
|
""''を変数に入れたいとき
まえに\をつけます。
あと種類が違えばオッケーです。
× $x = '彼女は'そこはダメ'と言った'
○ $x = '彼女は\'ご主人様ぁ\'と言った'
○ $x = "彼女は'めしあがれ'と言った"
× $x = "彼女は"なりませぬ"と言った"
○ $x = "彼女は\"今親居ない \"と言った"
○ $x = '彼女は"帰さないよ"と言った'
|
初期化
とすると $x の中には何も入っていない状態になります。
$x=0; $x=""; $x='';
でも可。
初期化という言葉の意味
初期化という言葉にはなんとなく2つの意味があります。
- 変数に何も入っていない状態にする。
- 何か特定の値をセットしておく。
|
また、ごくまれに何も定義していない変数にはデーターのゴミのようなものが混じること
があるらしいので、使うときには最初に明確に初期化しておくのが無難です。
例えば、$x = ""; としてから、print $x; とすれば確実に空文字が表示されます=なにも
表示されませんが、いきなり print $x; としたらどうなるか分からないということがあるみ
たいです。
0 と "" と undef
この部分はこれから先に出てくる話に影響する部分なので、今はわけがわからないかも
ですが、分からなくても結構ですので、とりあえず読み流して何かのときにもう1
度見てください。
undef はメモリを開放して変数を未定義の常態にします。
|
というわけで、0 と "" は値を定義された変数で、undefは未定義の変数です。
0 と "" と undef は同じような意味ですが、プログラミングの際、注意しないと判定す
るときに微妙に混乱するかもしれません。
例えば、if文で判定するとすべて偽になりますが、defined だとundefは真に、0 と ""
は偽になります。
あと、undefについては while(undef){} だと反応しませんが、for(undef){} だと反応
します。
この3つはどれも「なんにもなし」という点では「ある意味同じ」なので、うっかりして
いると判定を誤ったりしてプログラムが予想外の動作をし、慌てたり凹んだりします。
- Perlでは 0 と "" は偽、それ以外は真。
- undef は未定義。
- if文 や while,until では undef も 0 や "" と同じように偽と判定してくれますが、
defined で未定義かどうかと聞くと、0 や "" は定義されている(値が有る)と判定され、
undefは未定義(値が無い)という結果が返ってきます。
- for の undef は「未定義なものが1つある」と判断されるようです。
|
配列変数
配列変数と呼ばずに配列とだけ言うことが多いです。
配列とは、1つの変数に複数の値を持たせるものです。
|
前に$の代わりに @ を付けます。
内訳の頭には $ 、おしりに[背番号]をつけます。
番号は0から始まります。
分かりにくいので例で示すと、
#!c:/perl/bin/perl
print "Content-type: text/html; charset=Shift_JIS\n\n";
@x = ('ぎりのあね','尽くします','秘密だよっ');
print $x[0].'<br>';
print $x[1].'<br>';
print $x[2].'<br>';
↓
ぎりのあね
尽くします
秘密だよっ
|
@x にまとめて値を放り込んでおいて、使う時には @ を $ に変えて、後ろに [] を付
け足し、その中に番号を入れます。
背番号は0から始まります。だから1個めの値は $x[0] になります。
このとき注意しないといけないのが、$x と $x[0]は全く別のものだということです。
$x[0] は @x の内訳ですが、$x は何の関係もない赤の他人です。
イメージ的に書くとこうかな。
@X 親玉
$x[0] その内訳
$x[1]
$x[2]
$x[3]
…
内訳の$x[0]そのものは普通のスカラー変数と同じですので単体で使用することも出来ます。
例、
$x[0] = 1;
$x[2] = 2;
$x[3] = $[0] + $[1];
|
配列変数は同じ名前の変数に番号付けをして管理したい時に使用します。
例えば、この番号の中に変数を入れることも可能なので、なにかの都合で臨機応変に使
い分けたいときに便利です。(背番号だけを変えれば良いので)
例、
#!c:/perl/bin/perl
@x = ('すとらいくぅ〜','げーむせっと');
print "Content-type: text/html; charset=Shift_JIS\n\n";
print 'あなたは「ぎゅ、して」と言いますか?<br>';
print '0 = はい、1 = いいえ<br>';
print '(仮に 0 とす)<br>'; #←横着しました。(^-^;
$y = 0;
print $x[$y];
↓
あなたは「ぎゅ、して」と言いますか?
0 = はい、1 = いいえ
(仮に 0 とす)
すとらいくぅ〜
|
$y = 1; とすると げーむせっと と表示されます。
あとから追加することもできます。
$x[2] = 'なにか';
あと分かりやすいように「背番号」と言いましたが、これはプログラミング用語的には
「添え字」と言うことが多いです。
配列の初期化
全体の初期化
undef @x;
任意の要素だけを初期化
delete $x[1];
値をセットしておく初期化
@x = (1,2,3,4,5);
@y = qw(1 2 3 4 5);
(qw はスペースで区切った値をセットする演算子です。カンマが目に痛い人はよく使います。)
配列への命令
配列には以下のような関数が用意されています。
| 要素を追加 | 要素を削除 |
配列のあたまに(から) | unshift | shift |
配列のおしりに(から) | push | pop |
$x = unshift @x; $x = shift @x; push (@x,$x); pop(@x,$x);
shiftがよく使うかもです。サブルーチンのあたりで説明します。
配列の添え字
以下のように書くとその配列の要素数や要素数-1(添え字の最大値(添え字は0から始まるので))が取れます。
@arrayの要素数 $yousosuu = @array |
@arrayの添え字の最大値 $max = $#array
ついでに、
この特殊変数に数字を代入すると、配列の数を減らせます。
例、
@a=(1,2,3,4,5,6,7,8);
$#a=3;
print @a;
↓
1234 (添字が3までの配列になる)
|
配列の結合
@a=(@b,@c);
これだけ。
ハッシュ変数(連想配列)
連想配列とも言います。最近ではハッシュと呼ぶことが多いように思います。別にどち
らでも良いです。
その実は普通の配列と同じで、番号の変わりに言葉を使っているだけです。
|
親玉の頭には%をつけます。
番号代わりの言葉と内容との関連付けには => を使います。
内訳のおしりには{}をつけます。
#!c:/perl/bin/perl
print "Content-type: text/html; charset=Shift_JIS\n\n";
%x = ('nomal'=>'好きです','moe'=>'大好きだよ');
print "分かってない → ".$x{nomal}."<br>";
print "心得ている → ".$x{moe}."<br>";
print "「だよ」なのだよ!";
↓
分かってない → 好きです
心得ている → 大好きだよ
「だよ」なのだよ!
|
配列変数で使う[]{}の中の数字や文字は添え字と呼びます。
添え字が数字であるのと文字であるのとでは使い方次第で利便性が異なります。
はじめはあまりハッシュを使うことがないかもですが、まとまったデーターを取り扱うよ
うになるとありがたみがでてきます。
ハッシュの初期化
全体の初期化
undef %x;
任意の要素だけを初期化
undef $x{nomal};
値をセットしておく初期化
%x = ('A'=>1,'B'=>2,'C'=>3);
%y = ('A',1,'B',2,'B',3);
(普通は上)
要素の順番
ハッシュの場合は
%x = ('nomal'=>'好きです','moe'=>'大好きだよ');
と定義しても、コンピューター的にはその順番はめちゃくちゃになっています。
試しに print %x; とした場合、必ずしも順番どおりには表示されません。
だからどうしたと言えば、あまりどうでもよいのですが。
あともう1つ、print %x; とすると分かったかもですが、%x の中身は
'nomal','好きです','moe','大好きだよ'
となっていて、文字列が4つ格納されています。
これは普通の配列と同じです。この文字列のデーターをハッシュとして扱うときに、奇
数番目の文字列を「キー(添え字)」とし、偶数番目の値を「値」としているにすぎないの
です。
って、別に普通に使う分にはこんなこと意識する必要はないので覚えなくて良いですよ。
|
などと言っているうちに、もう紹介するPerl本が無くなってしまいました。
いきなりたいして本を読んでいないという無学ぶりを露呈する私。(-_-;
というわけで、プログラムとは無関係ですが友人(と私が勝手に思っているだけかもしれ
ない)の小説を紹介します。させて下さい。
相当イメージしにくいような別世界へ叩き込まれますが、読みやすい文章で抵抗無く頭に
そのシーンが再生されます。ずば抜けたセンスの持ち主です。恐ろしい。
異次元異物の名人です。普段お描きになられている絵も捨てがたいのですが商業誌なのでプロのイラ
ストレーターさんに。 うぉっ、も、素晴らしい萌え絵だ。
私が以前原稿を書かせて戴いた一冊です。
はずかしながら一応ご紹介致します。
|
|