stdClassをやってみた
PHPのstdClassがシンプルだったので、Perlでやってみた。
PHP
<?php $obj = new stdClass(); $obj->first_name = 'Taro'; $obj->family_name = 'Yamada'; print $obj->first_name; //=> Taro print $obj->family_name; //=> Yamada
Perl
stdClass.pm
package stdClass; use strict; use warnings; sub new { bless {}, __PACKAGE__ } sub AUTOLOAD :lvalue { my $self = shift; my $method = our $AUTOLOAD; $method =~ s/.*:://; $self->{$method}; } sub DESTROY {} 1; __END__
test.pl
#!/usr/bin/env perl use strict; use warnings; use lib './lib'; use stdClass; my $obj = new stdClass(); $obj->first_name = 'Taro'; $obj->family_name = 'Yamada'; print $obj->first_name; #=> Taro print $obj->family_name; #=> Yamada
こうして見るとPHPとPerlって書き方すごく似通ってるなぁ。
今回初めて AUTOLOAD や無名サブルーチンにも :lvalue 属性が使えることを知った。
Class::Accessor::Lvalue::Fastいいよね。