拙著「個人投資家は低位株で儲けなさい」が発売されました。
株価が安い「低位株」に投資する方法を解説しています。
自由国民社刊で、定価1,512円(消費税込み)です。
PHPでシリアライズしたデータをPerlで扱う
PHPには、配列(および連想配列)やオブジェクトをシリアライズて文字列にしたり、元に戻したりする関数があります(serialize/unserialize)。
配列等をファイルやデータベース等に保存する際に、これらの関数を使うと便利です。
serialize関数でシリアライズしたデータを、Perlで扱いたい場面がありましたので、その方法を調べてみました。
1.PHPでシリアライズしてPerlで読む
PHPのシリアライズをPerlで扱うモジュールとして、PHP::Serializationがあります。
PHPでシリアライズしたデータをPerlで読むには、unserializeというサブルーチンを使います。
たとえば、PHPで以下の配列を作ったとします。
$a = array( 'name' => array( 'first' => 'Taro', 'last' => 'Yamada', ), 'birthday' => '1970-5-1', );
この配列をシリアライズすると、以下の文字列が得られます。
a:2:{s:4:"name";a:2:{s:5:"first";s:4:"Taro";s:4:"last";s:6:"Yamada";}s:8:"birthday";s:8:"1970-5-1";}
この場合、以下のようなコードで、Perlでデータを復元することができます。
use PHP::Serialization qw( serialize unserialize ); my $ser = 'a:2:{s:4:"name";a:2:{s:5:"first";s:4:"Taro";s:4:"last";s:6:"Yamada";}s:8:"birthday";s:8:"1970-5-1";}'; my $a = unserialize($ser);
結果をダンプしてみると、以下の通り正しく変換できています。
$VAR1 = { 'name' => { 'first' => 'Taro', 'last' => 'Yamada' }, 'birthday' => '1970-5-1' };
2.PerlでシリアライズしてPHPで読む
上記の逆方向で、Perlのデータをシリアライズして、それをPHPで読むこともできます。
Perl側では、「serialize」というサブルーチンを使って、配列やハッシュなどを文字列に変換します。
たとえば、名前が%hのハッシュがある場合、それをシリアライズして変数$serに代入するには、以下のように書きます。
$ser = serialize(\%h);
一方、PHP側では「unserialize」という関数を使って、データを復元します。
たとえば、シリアライズした文字列が変数$serに入っていて、その復元結果を変数$aに代入するには、以下のように書きます。
$a = unserialize($ser);