Top > MyPage
 

PerlとPHP

PerlとPHP

PerlとPHPは似ているところがあるが、似ているがゆえにちょっとしたところで、間違えやすい。そこで、配列の扱いなどPerlとPHPの違うところをあげていく。

プリフィクスの違い

Perlでは、スカラであれば、配列であれば、ハッシュであればなるプリフィクスが変数名につく。しかし、PHPでは全てである。Perlの表記に慣れていると、ひっかかるところである。

また、PHPの場合、配列とハッシュの区別が無く、ハッシュは配列としてもアクセスできる。

# perl
$string = 'string';
@array = qw(this is an array);
%hash = ('key' => 'value');

// PHP
$string = 'string';
$array = array('this', 'is', 'an', 'array');
$hash = array('key' => 'value');

配列の違い

PHPで配列型の変数を作る場合は、を使用する。

# perl
@a = ( 'xx', 11, 33.5, );
@a = 12..33;


// PHP
$a = array( 'xx', 11, 33.5, );
$a = range(12,33);

配列から値を取り出す場合、どちらも同じような書き方である。配列aのひとつ目の要素を取り出すとすると次のようになる。要素はスカラなのでPerlの場合はプリフィクスがからになる。

# perl
$value = $a[0];    #一番目の要素をとりだす。
$a[1] = 'string';  #二番目の要素に文字列を代入

// PHP
$value = $a[0];    //一番目の要素をとりだす。
$a[1] = 'string';  //二番目の要素に文字列を代入

多次元配列の違い

配列に関して、PerlとPHPで大きく違うのが多次元配列の作り方である。次のように書くと、一見同じようにみえるが、全く違う意味になる。

# perl
@a3 = ('xx', @a1, @a2);

// PHP
$a3 = array('xx', $a1, $a2);

例のようにした場合、perlの方は括弧の中の配列が展開されて、a3は一次元の配列となる。しかし、PHPの方は、括弧の中の配列は展開されず、一要素として扱われて多次元配列となる。したがって、このときのa3の要素数は3となる。

Perlで同様の多次元配列を作るには次のようにする。

# perl
@a3 = ('xx', \@a1, \@a2);

配列a1,a2のリファレンスを要素とすることで同様の多次元配列となる。

ちょっと複雑な例を示してみる。

# perl
$mix = [['a1', 'a2'], 'b', ['c1', {'c2i' => 'value'}, 'c3']];
$value = $mix->[2]->[1]->{'c2i'};  #$valueには'value'が入る

// PHP
$mix = array(array('a1', 'a2'), 'b', array('c1', array('c2i' => 'value'), 'c3'));
$value = $mix[2][1]['c2i'];        #$valueには'value'が入る

ハッシュの違い

Perlではハッシュと配列は別物であるが、PHPではハッシュも配列として扱われる。例を示す。

# perl
%hash = ( 'x' => 'y',
          'z' => 'w',
        );
        
$h{'x'} = 7;

$a = keys(%hash);
$b = values(%hash);

// PHP
$hash = array( 'x' => 'y',
               'z' => 'w',
             );

$h['x'] = 7;

$a = array_keys($hash);
$b = array_values($hash);

他にも違うところはいろいろあるが、大きなところはこのような感じ。

参考ページ

・Perl/Php Translation