2007年08月03日

bradプロダクトではuse fieldsが多用されています。そして、

my ClassName $var;
のような変数宣言が多用されています。
perldoc -f myしてみるとuse fieldsで使うみたいな事が書いてありました。
use fieldsってのは
package Jitensya;
use strict;
use warnings;
use fields qw/(sound);

sub new {
    my $proto = shift;
    my $self  = ref $proto ? $proto : fields::new($proto);
    $self;
}
1;
のようなコードがあるとして
use strict;
use warnings;
use Jitensya;

my $hatena = Jitensya->new;
$hatena->{sound} = 'わいが近藤や';
$hatena->{dog}   = 'しなもん';
という使い方をした時に、$hatena->{dog}のところでfieldsで宣言されてないからエラーが出るという物です。

で、冒頭の

my ClassName $var;
の件ですが、このuse fieldsされたpackageがuse baseとかで継承された時に役立つようです。
たとえば、以下のpackageが在る状態で
#はてなスタッフを表す
package Hatena;
use strict;
use warnings;

use fields qw(jkondo naoya kawasaki);

sub new {
  my Hatena $proto = shift;
  my $self = ref $proto ? $proto : fields::new($proto);
  $self->{jkondo}   = 'syatyou';
  $self->{naoya}    = 'CTO';
  $self->{kawasaki} = 'fukusyatyou';
  $self;
}
1;
# はてなユーザを表す
package Hatena::User;
use strict;
use warnings;
use base 'Hatena';

use fields qw(yappo);

sub new {
  my Hatena::User $proto = shift;
  my $self = $proto->SUPER::new(@_);
  $self;
}
1;
下記のコードを走らせた時はエラーもなく動きます。
use strict;
use warnings;
use Data::Dumper;

use Hatena::User;

my $jitensya = Hatena::User->new;
$jitensya->{yappo} = 'gennin';

warn Dumper $jitensya;
しかし、Hatena::Userのオブジェクトを受け取る$jitensyaの前にHatenaという指定を追加すると。。。
use strict;
use warnings;
use Data::Dumper;

use Hatena::User;

my Hatena $jitensya = Hatena::User->new;
$jitensya->{yappo} = 'gennin';

warn Dumper $jitensya;
Javaとかのtypecastみたいに、一時的に別の名前空間のfieldsにする(継承元の名前空間に固定する)みたいな事をするんだと思います。
この例では、Hatenaは、はてなスタッフだけがいるpackageなので、はてな社員でないyappoに値を入れると怒られます。

bradプロダクトで見かける

            my Perlbal::BackendHTTP $self   = shift;
            my Perlbal::HTTPHeaders $hd     = $self->{res_headers};
            my Perlbal::ClientProxy $client = $self->{client};
            my Perlbal::HTTPHeaders $rqhd   = $self->{req_headers};
のmyの後にpackage名を書くのは、こういうことからなのかなぁと。

実は、fieldsを使わなくてもハッシュのキーの制限は出来て

my $hash = [{ boofy => 1, sledge => 2 }];
$hash->{boofy}  = 'mixi';
$hash->{sledge} = 'livedoor';
$hash->{'catalyst::shanon'} = 'shanon'; # error
みたいに出来ますが、perl 5.9からは使えなくなります。
配列の一項目目ハッシュリファレンスだったら制限付きのハッシュになるそうで、これをpseudo-hash(仮想ハッシュ)と言うそうです。

perl 5.9からどうすればいいかというと、Hash::Utilを使います。

use Hash::Util;
my $hash = {};
Hash::Util::lock_keys(%$hash, qw/ boofy sledge /);
$hash->{boofy}  = 'mixi';
$hash->{sledge} = 'livedoor';
$hash->{'catalyst::shanon'} = 'shanon'; # error
と書けます。これは5.8でも使えるので、今から仮想ハッシュしたければHash::Util使えばおkっぽい。

use fieldsも5.9以降からはHash::Utilを使って実装されていますが、なぜかfields::phashが使えなくなってます、Hash::Util使えば実装出来るのになんで削除されるんだろう。

Hash::Utilの実装を見てるとInternalという名前空間の関数使いまくりなんですが、これの資料がどこにあるかが解らない。

と、つい最近知ったばっかりの仕様についてだらだら書いてみました。
応用すれば5.8環境でhash版のuse strict 'vars'もどきが書けそうですね。

Posted by Yappo at 2007年08月03日 19:56 | TrackBack | Perl
Comments

wow superfriendlinks:wow powerlevel,
world of warcraft powerleveling,
wow cd key,
world of warcraft cd key,
lineage2 cd key,
world of warcraft cd key,
lineage 2 account,
lord of the rings online powerleveling,
lord of the rings online gold,
wow power leveling,runescape gold,
runescape money,
runescape gold,
runescape money,
wow power leveling,
wow gold,
World of warcraft Power Leveling,
wow gold,
World of warcraft Power Leveling,
wow power leveling,
buy wow gold,
wow gold,wow gold,
dofus kamas
dofus kamas
buy dofus kamas,
sell dofus kamas,
buy dofus kamas,
sell dofus kamas,
Ffxi Gil
Final Fantasy Xi Gil
Guild Wars Gold
Lord Of The Rings Online gold
lord of the rings gold
2moons Dil
2moons
buy lotro gold
lotro gold,
runescape gold,
runescape money,
warcraft gold,
warcraft power leveling,
wow power leveling,
wow leveling,
promotional products,
promotional items,
dog products,
flashlight,
wholesale dog clothing,
wholesale dog clothes,
wholesale dog clothes,
Dog Clothes,
Dog Clothes,
chongqing,
yantai,
Dog Collar
Dog Clothes
Pet products
Dog Clothing
Dog apparel
Dog carrier
Dog Leash
Dog Clothes
Pet products
Dog Clothing
Dog Collar
Dog apparel
Dog carrier
Dog Leash
oil purifier,
wedding dresses,
出国留学,
美国留学,
英国留学,
留学美国,
留学英国,
成人用品,
真空滤油机
滤油机,
净油设备
VI设计,
标志设计,
环氧地坪,
网球场,
工作服,
西服,
制服,
职业装,
服装设计,
强直性脊椎炎,
商务礼品,
礼品公司,
礼品采购,
上海机票,,
上海打折机票,,
上海特价机票,
上海到北京机票'
上海到深圳机票
上海到重庆机票
传奇世界私服
传世私服
f67fg9yr56e6y9nh99g87t6r5r l9u5l7qv

Posted by: shyhge at 2007年11月04日 16:01

blog.yappo.jp/yappo/archives/000526.html

Posted by: d at 2007年11月19日 13:22


  大阪市 都島区 歯科 大阪市 都島区 歯科 大阪市 都島区 歯科 大阪市 福島区 歯科 大阪市 福島区 歯科 大阪市 福島区 歯科 大阪市 此花区 歯科 大阪市 西区 歯科 大阪市 西区 歯科 大阪市 西区 歯科 大阪市 港区 歯科 大阪市 大正区 歯科 大阪市 天王寺区 歯科 大阪市 天王寺区 歯科 大阪市 天王寺区 歯科 浪速区 歯医者 浪速区 歯医者 浪速区 歯医者 浪速区 歯医者 大阪市 西淀川区 歯科 東淀川区 歯科 大阪市 生野区 歯科 大阪市 旭区 歯科 大阪市 旭区 歯科 大阪市 旭区 歯科 大阪市 城東区 歯科 大阪市 城東区 歯科 大阪市 城東区 歯科 大阪市 阿倍野区 歯科 大阪市 阿倍野区 歯科 大阪市 阿倍野区 歯科 大阪市 阿倍野区 歯科 住吉区 歯科 住吉区 歯科 大阪市 東住吉区 歯科 大阪市 東住吉区 歯科 大阪市 西成区 歯科 大阪市 淀川区 歯科 大阪市 淀川区 歯科 大阪市 淀川区 歯科 大阪市 淀川区 歯科 大阪市 鶴見区 歯科 大阪市 鶴見区 歯科 大阪市 鶴見区 歯科 住之江区 歯科 大阪市 平野区 歯科 大阪市 平野区 歯科 大阪市 北区 歯科 大阪市 北区 歯科 大阪市 北区 歯科 大阪市 北区 歯科 大阪市 中央区 歯科 大阪市 中央区 歯科 大阪市 中央区 歯科 大阪市 中央区 歯科 堺市 歯科 堺市 歯科 堺市 歯科 堺市 歯科 豊中市 歯科 豊中市 歯科 豊中市 歯科 豊中市 歯科 池田市 歯科 池田市 歯科 吹田市 歯科 吹田市 歯科 吹田市 歯科 吹田市 歯科 泉大津市 歯科 高槻市 歯科 高槻市 歯科 高槻市 歯科 高槻市 歯科 貝塚市 歯科 守口市 歯科 守口市 歯科 守口市 歯科 枚方市 歯科 枚方市 歯科 枚方市 歯科 茨木市 歯科 茨木市 歯科 茨木市 歯科 茨木市 歯科 八尾市 歯科 八尾市 歯科 八尾市 歯科 泉佐野市 歯科 富田林市 歯科 寝屋川市 歯科 寝屋川市 歯科 寝屋川市 歯科 寝屋川市 歯科 河内長野市 歯科 松原市 歯科 大東市 歯科 大東市 歯科 大東市 歯科 大東市 歯科 和泉市 歯科 箕面市 歯科 箕面市 歯科 箕面市 歯科 箕面市 歯科 羽曳野市 歯科 門真市 歯科 摂津市 歯科 藤井寺市 歯科 東大阪市 歯科 東大阪市 歯科 東大阪市 歯科 東大阪市 歯科 狭山市 歯科 江坂 歯科 江坂 歯科 江坂 歯科 大阪市 歯科 大阪市 歯科 梅田 歯科 梅田 歯科 梅田 歯科 梅田 歯科 心斎橋 歯科 心斎橋 歯科 心斎橋 歯科 心斎橋 歯科 神戸市 歯科 神戸市 歯科 神戸市 東灘区 歯科 神戸市 東灘区 歯科 神戸市 灘区 歯科 神戸市 兵庫区 歯科 神戸市 長田区 歯科 神戸市 須磨区 歯科 神戸市 垂水区 歯科 神戸市 垂水区 歯科 神戸市 垂水区 歯科 神戸市 垂水区 歯科 神戸市 北区 歯科 神戸市 北区 歯科 神戸市 中央区 歯科 神戸市 中央区 歯科 神戸市 中央区 歯科 神戸市 西区 歯科 神戸市 西区 歯科 神戸市 西区 歯科 姫路市 歯科 姫路市 歯科 尼崎市 歯科 尼崎市 歯科 尼崎市 歯科 明石市 歯科 明石市 歯科 西宮市 歯科 西宮市 歯科 西宮市 歯科 芦屋 歯科 芦屋 歯科 芦屋 歯科 伊丹市 歯科 伊丹市 歯科 伊丹市 歯科 伊丹市 歯科 加古川市 歯科 宝塚市 歯科 宝塚市 歯科 川西市 歯科 川西市 歯科 川西市 歯科 三田市 歯科 加古郡 歯科 三宮 歯科 三宮 歯科 三宮 歯科 神戸 元町 歯科 神戸 元町 歯科 神戸 元町 歯科 京都市 歯科 京都府 歯科 京都市 北区 歯科 京都市 上京区 歯科 京都市 左京区 歯科 京都市 中京区 歯科 京都市 東山区 歯科 京都市 下京区 歯科 京都市 南区 歯科 京都市 右京区 歯科 京都市 伏見区 歯科 京都市 山科区 歯科 京都市 西京区 歯科 舞鶴市 歯科 宇治市 歯科 京田辺市 歯科 歯科医院 経営歯科 コンサルタント歯科 経営 コンサルタント 歯科 歯医者 矯正歯科 審美歯科 賃貸 心斎橋 大阪市 西区 賃貸

Posted by: t at 2007年11月19日 13:26

hj

Posted by: d at 2007年11月19日 13:57

rs-sky is an professional store for runescape gold,runescape

gold
,items,runescape logs,runescape rare items
,money,accounts,pure account,power leveling,runescape

money
quests,runes,weapons and party hats with fast delivery and world class service.
runescape gold

runescape money

Posted by: rs-sky at 2007年12月07日 14:07

[url=http://www.runelevel.com]runescape money[/url]
[url=http://www.runelevel.com]runescape gold[/url]
[url=http://www.runelevel.com]runescape account[/url]
[url=http://www.rs2powerleveling.com]runescape money[/url]
[url=http://www.rs2powerleveling.com]runescape gold[/url]
[url=http://www.rs2powerleveling.com]runescape account[/url]
[url=http://www.rs2lostcity.com]runescape money[/url]
[url=http://www.rs2lostcity.com]runescape gold[/url]
[url=http://www.rs2lostcity.com]runescape account[/url]
[url=http://www.runelvl.com]runescape money[/url]
[url=http://www.runelvl.com]runescape gold[/url]
[url=http://www.runelvl.com]runescape account[/url]
[url=http://www.runelvl.com]runescape gp[/url]
[url=http://www.runelvl.com]runescape coin[/url]
[url=http://www.runelvl.com]rs2 money[/url]
[url=http://www.runelvl.com]rs2 gold[/url]
[url=http://www.runelvl.com]cheap runescape money[/url]
[url=http://www.runelvl.com]cheap runescape gold[/url]
[url=http://www.runelvl.com]buy cheap runescape money[/url]
[url=http://www.runelvl.com]buy cheap runescape gold[/url]
[url=http://www.runehat.com]runescape money[/url]
[url=http://www.runehat.com]runescape gold[/url]
[url=http://www.runehat.com]runescape account[/url]
[url=http://www.runehat.com]runescape gp[/url]
[url=http://www.runehat.com]runescape coin[/url]
[url=http://www.runehat.com]rs2 money[/url]
[url=http://www.runehat.com]rs2 gold[/url]
[url=http://www.runehat.com]cheap runescape money[/url]
[url=http://www.runehat.com]cheap runescape gold[/url]
[url=http://www.runehat.com]buy cheap runescape money[/url]
[url=http://www.runehat.com]buy cheap runescape gold[/url]
[url=http://www.runemall.com]runescape money[/url]
[url=http://www.runemall.com]runescape gold[/url]
[url=http://www.runemall.com]runescape account[/url]
[url=http://www.runemall.com]runescape coin[/url]
[url=http://www.runemall.com]rs2 money[/url]
[url=http://www.runemall.com]rs2 gold[/url]
[url=http://www.runemall.com]runescape gp[/url]
[url=http://www.runemall.com]cheap runescape money[/url]
[url=http://www.runemall.com]cheap runescape gold[/url]
[url=http://www.runemall.com]buy cheap runescape money[/url]
[url=http://www.runemall.com]buy cheap runescape gold[/url]
[url=http://www.suprune.com]runescape money[/url]
[url=http://www.suprune.com]runescape gold[/url]
[url=http://www.suprune.com]runescape gp[/url]
[url=http://www.suprune.com]runescape coin[/url]
[url=http://www.suprune.com]runescape account[/url]
[url=http://www.suprune.com]rs2 money[/url]
[url=http://www.suprune.com]rs2 gold[/url]
[url=http://www.suprune.com]cheap runescape money[/url]
[url=http://www.suprune.com]cheap runescape gold[/url]
[url=http://www.suprune.com]buy cheap runescape money[/url]
[url=http://www.suprune.com]buy cheap runescape gold[/url]

Posted by: hejuan at 2007年12月16日 11:26

[url=http://www.tanshua.com/en/index.asp]carbon brush holder[/url] [url=http://www.hzgames.com/news.asp]runescape money[/url] [url=http://www.hzgames.com/news.asp]runescape gold[/url] [url=http://www.hzgames.com]runescape gold[/url][url=http://www.gowowpowerleveling.com/Gold.asp]runescape money[/url] [url=http://www.ruian2machine.cn]金属探测器[/url] [url=http://www.lanhom.net]上海翻译公司[/url] [url=http://www.mmosgames.com]runescape money[/url] [url=http://www.mmosgames.com]runescape gold[/url] [url=http://www.mmosgames.com]dofus kamas[/url] [url=http://www.mmosgames.com]Lord of the Rings Online Gold[/url] [url=http://www.lw510.com]计算机毕业论文[/url]

[url=http://www.tanshua.com]碳刷[/url] [url=http://www.tanshua.com]碳刷架[/url] [url=http://www.rajingwei.com/SEO_YOU.htm]google左侧排名[/url] [url=http://www.rajingwei.com/NewsList_2.htm]google排名[/url] [url=http://www.fenixpainting.com]oil painting[/url] [url=http://www.ricoma.us]embroidery machines[/url] [url=http://www.yamata.com]sewing machines[/url] [url=http://www.deer-ac.com]air conditioner[/url] [url=http://www.yszdh.com]runescape money[/url] [url=http://www.yszdh.com]runescape gold[/url] [url=http://www.mmosgames.com]lotro gold[/url] [url=http://www.yszdh.com]rs2 money[/url] [url=http://www.autocyd.com]汽车空调[/url]

[url=http://www.bags-replica.com]Louis vuitton replica[/url] [url=http://www.high-replica.com]replica handbags[/url] [url=http://www.topowerleveling.com]power leveling[/url] [url=http://www.gowowpowerleveling.com]power leveling[/url] [url=http://www.topowerleveling.com]wow power leveling[/url] [url=http://www.gowowpowerleveling.com]wow power leveling[/url] [url=http://www.topowerleveling.com]world of warcraft power leveling[/url] [url=http://www.gowowpowerleveling.com]world of warcraft power leveling[/url] [url=http://www.tanshua.com/en/index.asp]carbon brush[/url] [url=http://www.mmosgames.com]rs2 money[/url]


[url=http://www.topcallme.cn]窃听器[/url] [url=http://www.topcallme.cn]监听器[/url] [url=http://www.topcallme.cn]手机窃听器[/url] [url=http://www.123she.cn]乱伦小说[/url] [url=http://www.123she.cn]淫妻小说[/url] [url=http://www.123she.cn]性爱小说[/url] [url=http://www.123she.cn]情色文学[/url] [url=http://www.123she.cn]成人小说[/url]

Posted by: www at 2008年01月11日 16:15
Post a comment









Remember personal info?






コメントを投稿する前に↓の場所にnospamと入力してください。