PerlとPHPの違い

変数の前にシジル(ドル記号等のこと)があって、プログラムの記述が結構似ているPerlとPHPだが、どういった点で違いが出てくるのかを簡単にまとめておきたい。

オブジェクト指向

Perlはblessを追加することで、取って付けたような感じでオブジェクト指向を実現している。 new(コンストラクタ)はあくまでも「サブルーチンを呼び出してメンバ変数とパッケージを関連付けている」ような感じ。 基本的にアクセサやメンバ変数などの制約は頑張って自分で実装するか、不要であればそのまま放置するか、Moose等のモジュールを使ってpackageを作るか、といった流れになる。

PHPのオブジェクト指向

今のPHPは標準でclassを定義するための機構があり、言語として必要十分なオブジェクト指向の機能をサポートしている。 public/protected/privateのアクセス修飾子, staticキーワード等がある。

レキシカルスコープ

モダンなPerlはuse strictしてほぼすべての変数をmyで宣言してレキシカルスコープで取り扱うが、PHPにはそういうのが無い。

forやforeachで初めて宣言した変数が、そのループを抜けた後に参照できないのがPerlで、参照できてしまうのがPHP。

PHPの書き方に慣れてしまうと小さなブロックで宣言した変数を、その外で参照することに対する抵抗感がなくなってしまうのでちょっとコワイ。

配列

PHPの配列はかなり独特で高機能。

例えば以下のようにPerlで連想配列を定義する時、参照する頃には定義した順番は情報として失われてしまう。


my $hash = [
        'first' => 1,
        'second' => 2,
        'third' => 3,
    ];

use Data::Dumper;
print Dumper $hash;

しかし、PHPでは連想配列を定義した際の順番まで保持され、それが言語の仕様として保証される。


my $hash = [
        'first' => 1,
        'second' => 2,
        'third' => 3,
    ];

print_r($hash);


prev: ZONEうまい
next: GEX ラクフィルを購入
created at : 2020-06-02 13:39:42
updated at : 2020-06-02 14:11:12
author : Toshiaki Yokoda