Vol.128(2022年4月23日発売)前回の(1)はこちらから。ある質問への回答ここでは、Perl入学式でよく寄せられる質問と、それに対する回答を紹介します。変数名の左にある記号がコロコロ変わって理解できないPerlには、変数の種類によって変数名の前に付くシジルと呼ばれる記号があります。スカラは$、配列は@、ハッシュは%がシジルとして変数名の前に付きます。同じ変数名であっても、異なるシジルが付いていれば別の変数として扱われます。シジルが$のスカラは、1つの値を保持する変数です。この値は、数値、文字列、そして後述するリファレンスのいずれかです。スカラが保持可能な値はスカラ値と呼ばれます。シジルが@の配列とシジルが%のハッシュは、複数のスカラ値を要素として含む変数です。配列やハッシュの1要素であるスカラ値にアクセスするときは、シジルが$に変化します。サブルーチンの戻り値として配列を受け取るときは、シジルが@の配列に代入します。ハッシュリファレンスをデリファレンスしたものは、シジルが%のハッシュに代入します。自分が操作したい対象を意識できると理解が進み、適切なシジルを選択できます。配列とハッシュを使い分けられない初学者であっても、スカラ値を格納するだけのスカラの理解は容易です。配列とハッシュは、ともに要素の集合を扱う用途のため、配列を使うべき場面でハッシュを使う(あるいはその逆)など、すぐに理解して使いこなすのは難しいようです。配列は、要素を順番に処理する場面で活用します。$member\n";}ハッシュは、要素に名前を付けて、必要な要素を名前で取り出せると便利な場面で活用します。配列とは異なり順不同です。$score{English}\n";配列とハッシュそれぞれの特徴を把握すると、正確に使い分けることができます。初歩的文法を理解できているか不安15年ほど前に話題になったFizzBuzz問題を解いてみましょう。1から100までの数をプリントするプログラムを書け。3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。返し(for文)の適切な組み合わせが必要です。for文による繰り返し処理。}}このFizzBuzz問題をスムーズに解ければ、初歩的文法の理解は十分と言えます。リファレンスを使う理由がわからない受講生から、リファレンスを使う理由がわからないという意見がよく寄せられます。使う理由がわからないから使わない、使わないから理解が進まないといった悪循環を繰り返し、結果的にPerlの学習を挫折する人もいます。Perlのスカラには1つの値しか代入できません。配列やハッシュの要素として、別の配列やハッシュ全体を直接格納することはできません。リファレンスは、実データがある場所を指し示すスカラ値です。配列やハッシュのリファレンスは、スカラに代入したり、配列やハッシュの1要素として格納できます。これを利用すれば、配列とハッシュが入れ子となる複雑なデータ構造を扱えます。\n";}リファレンスを使う理由を理解し、応用的に使うことが理解への早道となるでしょう。変数の中身が意図しない値になる変数に格納された数値や文字列をコピーしてほかの変数へ渡した場合、それぞれの値への変更は互いに影響を受けません。これを値渡しと呼びます。それに対してリファレンスをコピーしてほかの変数へ渡した場合、同一の値への参照を共有するため、それぞれの参照先への変更は互いにすべて反映されます。これを参照渡しと呼びます[1]⁠。値渡しと参照渡しの違いは、次のコードの実行結果で確認できます。1000値渡し時のコードでは、コピーを渡した先の変数$number1_dupに加えた変更は、コピー元の変数$number1の値には影響しません。参照渡しのコードでは、参照している変数$number2_refに加えた変更が、参照されている変数$number2の値にも適用されます。値渡しと参照渡しの特徴を理解して使い分けましょう。[1]Perlのリファレンスを渡す手法は、正しくは参照の値渡しと呼びます。エラーが発生したときはどうすればよいか自分が書いたプログラムが思ったとおり動かないときはどうしたらよいのでしょうか。エラーが発生したときは、まず最初にエラーメッセージを読みましょう。エラーメッセージに書かれたことすべてを理解するのは難しいですが、その一部をヒントに間違った箇所の見当を付けましょう。エラーメッセージを読んでみよう次のコードでは、1円の所持金を毎日倍にしていくと1ヵ月後にいくらになるかを計算しています。円になりました\n";ただし、間違いが1ヵ所含まれているので、コードの実行時にエラーメッセージが出力されます。errors.エラーメッセージを読んでみましょう。errorと書かれています。syntaxは日本語で構文を意味し、文法的な誤りがあることがわかります。これは、double_money.plに書かれたコードの7行目という意味です。Perlがコードを先頭から順に実行していった結果、7行目でエラーとなったことを意味し、7行目あたりに間違いがあるのだろうと推察できます。エラーの原因を見つけよう7行目の(2)にはprint処理が書かれていますが、特に文法的な間違いは見当たりません。いうときは、前後、特に前の処理を追いかけると問題箇所にたどり着けることが多いです。2の後ろに文末に必要な;が抜けていることがわかります。errorが出力されています。英語を苦手とする人も多いですが、エラーメッセージの一部だけでも読んで、問題箇所の見当を付けましょう。文末の;の書き漏れはよくあるミスなので注意してください。コミュニティに参加しようプログラミングをゼロから学んでいくうえで、疑問点を独学で解消し、モチベーションを維持することは大変です。Mongersというコミュニティが世界各地にあります。日本国内では年に1~2回のペースでYAPC::Japanというカンファレンスが開催されています。Mongerたちの熱い発表やPerlに関する情報交換が行われています。コミュニティに参加することで、Perlの熟練者に直接教わることができます。コミュニティに参加して得た知識や仲間は、普段の職場のつながりとは異なる次のような相乗効果をもたらします。大規模なカンファレンスに参加する楽しみが増える運営スタッフとしてカンファレンスの裏側を知ることができる技術系の執筆や、登壇の機会が得られる転職についての情報が得られるこれらを体験・経験することで、学習を持続するモチベーションが上がります。自分に合うコミュニティを見つけて参加しましょう。自分が必要とする勉強会やコミュニティが見つからなければ、自ら作るのも一つの手です。Perl入学式も、そのようにして始まりました。Perl入学式に参加しようPerl入学式は、プログラミング初学者のためにできるだけハードルを低くしたコミュニティです。小学生から還暦すぎまでさまざまな年代の人が参加します。Perl入学式のカリキュラムは、プログラミング初学者が最低限知っておくべき項目を厳選しています。変数、制御構造、サブルーチン、正規表現、リファレンスです。Perl入学式では、講義に参加できなかった人や講義後に疑問がわいた人のために、チャットツールのDiscordを使用して、環境構築時のトラブルや質問に対応するサポートを行っています。自分なりに頑張って勉強しても解決できないことはたくさんあります。筆者がPerl入学式の受講生としてプログラミングを学び始めたときは、講師の人に書いたコードとエラーメッセージをメールで送り、直接アドバイスをもらったこともありました。初学者でも安心して参加できるコミュニティで、さまざまな気付きを得ながら楽しく成長しましょう。まとめPerlは現在でもサーバの保守運用業務の領域で役立つなど、Perlをゼロから学ぶ価値は十分にあります。本稿を参考にPerlの環境を構築して、プログラミング学習の最初の一歩を踏み出してください。Perlのコミュニティに参加して世界を広げましょう。