PerlとPHP
2007年6月22日 柴田 一志
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);
他にも違うところはいろいろあるが、大きなところはこのような感じ。
参考ページ
by 柴田 一志


