sironekotoroの日記

Perl で楽をしたい

Perl入学式で講師やりながら思った、過去の自分にしつこく教えてあげたかった事

この記事はPerl入学式 Advent Calendar 2017 17日目の記事です。

qiita.com

昨日(2018/02/03)に開催した「Perl入学式 in 東京 第3回」で配列操作とハッシュ変数、ハッシュの操作についての講師を担当しました。

教えることで学びを得られる、と言うのは本当のことで、理解の浅い部分があるなぁ、と思うことしきりです。

また、かつて自分が初学者だった時に早めに気づくことができれば・・・!ってことを思い出したりしました。今日はその、かつての「Perlの配列とかハッシュとかよう分からん」と言っていた自分向けのエントリです。

要約すると、配列もハッシュも、ようは一つの値の集まりなんよ!お前が表示したり変更したり追加したかったのは一つの値なんだから$つかえ!、ということをしつこく書いただけのエントリです。

$で始まるスカラー変数

Perlには一つの値しか代入できないスカラー変数があります。Perl入学式でいうと第2回の内容です。

github.com

use strict;
use warnings;

my $scalar = '123456';
print $scalar , "\n";   # 123456、改行

この $scalarスカラー変数です。

@で始まる配列変数だけど、個々の要素を指定する時は$なんだぜ

そして配列です。

@arrayが配列変数です。配列には複数の値を格納することができます。

配列変数@arrayの先頭の値を表示してみます。

use strict;
use warnings;

my @array = ( 1, 2, 3, 4, 5, 6 );

print $array[0] , "\n"  # 1、改行

配列@arrayの先頭にある値を直接print関数で表示しています。print関数の右側に注目すると、変数先頭の記号が @から$に変更されています。また、末尾に[0]が付け加えられています。

これは、配列内の一つの値を指し示す時の表記です。

配列の中の値を一つ指定するときは、スカラー変数を指定する時と同じように先頭の記号が$になります。そして配列の中の何番目に格納されている値なのか?を末尾にある[0]で指定しています。この[0]は「添え字」と呼ばれます。

強調したいのは、一つの値を表示する、値を削除するなり変更するなり、とにかく一つの値を指し示す時は元の変数がなんであれ、先頭の記号が$になる、ということです。

%で始まるハッシュ変数だって、個々のkeyに結びついた情報取ってくる時は$なんだぜ

ハッシュ変数から値を一つ指定するときも同様です。

github.com

%hashがハッシュ変数です。ハッシュには複数の値を格納することができますが、配列とは異なり、key => value というペアで値を格納します。

use strict;
use warnings;

my %hash = (
    name        => 'sironekotoro',
    tweet_count => 202540,
);

print $hash{name} , "\n";       # sironekotoro、改行
print $hash{tweet_count} , "\n";# 202540、改行

ここでもハッシュの中の値を一つ表示する時、変数先頭の記号が%から$に変化しています。配列の値にアクセスする時と同じです。

そして、ハッシュ内のどのkeyに結びついたvalueが欲しいのかを指し示すために、末尾に中かっこで括った{key}を加えます。

ここでも配列から一つの値を操作する時と同様、対象は一つの値なので、$を使います。

つまり・・・?

配列もハッシュも、一つの値の集まりなんよ!

お前が表示したり変更したり追加したかったのは一つの値なんだから$つかえ!

って事を、自分に教えてあげたら、も少し早く理解できたかなぁと思ったのでした。