Perlの哲学 - Perlに対する誤解を解く

Perlのリファレンスの機能は、C言語のポインタの機能と似ている

Perlには、リファレンスと呼ばれる値の参照を取得できる機能がありますが、これはC言語のポインタの機能と同じものです。

Perlのリファレンス

Perlの値のリファレンスは「\」で取得できます。

my $num = 1;
my $num_ref = \$num;

C言語のポインタ

C言語では、値のアドレスを「&」で取得し、ポインタ型の変数に代入できます。

int32_t num = 1;
int32_t* num_ptr = #

PerlのリファレンスとC言語のポインタの比較

記号が「\」であるか「&」であるかを除いては、PerlとC言語は同じことをしています。Perlの場合はリファレンスを取得すると書いていますが、実際にはアドレスの値を取得しているだけです。C言語ではアドレス演算ができますが、Perlのリファレンスは、C言語における、アドレス演算ができないアドレス値だと考えてください。

C言語の場合は、ポインタ変数に代入していますが、Perlの場合は、型が動的なので、変数にそのまま代入できます。

C言語で覚えたポインタの概念がPerlでもそのまま使える

大学のソフトウェアの授業で、頑張って覚えたC言語のポインタの概念を、Perlでもそのまま活用することができます。

また、Perlからプログラミングを始めた方は、C言語のポインタに該当する機能を、Perlを使って、理解することができます。

PerlはC言語と同じく、値と参照を明確に区別する言語です。

「値と参照の区別は隠してしまったほうがユーザーは使いやすい」という意見も一方にありますが、値と参照を区別することは、ソフトウェアのデータに関する非常に基礎的な考え方なので、区別ができるということは、メリットでもあるのです。

C言語より低レベルなアセンブラや機械語といった分野では、値と参照(アドレス)をしっかり区別できることが、エンジニアとしての基礎知識として求められるからです。

この違いを言語の個性として、とらえてみるのはいかがでしょうか?

PerlとC言語の他の類似点

この記事では、PerlのリファレンスがC言語のポインタと似ているということを書きましたが、Perlのif文、for文、while文、インクリメント/デクリメント、演算子の優先順位、スコープ、参照概念も、C言語の文法と似ています。