トップ «前の日記(2006-07-04(Tue)) 最新 次の日記(2006-07-06(Thu))» 編集

ぽっぺん日記@karashi.org


2006-07-05(Wed) [長年日記]

_ 武蔵流プログラマへの道 - skk.vimがvim.orgで公開!

オレンジニュース(2006-07-04)経由で。

ヘタレvim使いなんだけれども、SKKの使用歴(だけ)は長いので、非常に嬉しい。

_ databases/db44をインストール

portupgradeの標準DBがdatabases/db41になったらしく、良い機会なので、色々なバージョンが混在してインストールされているdb4*を最新版のdb44に更新、依存しているpackageも追随させたのでメモ。

作業手順は下記の通り。

まず、

portinstall /usr/ports/databases/db44

でdb44をインストール。

次に/etc/make.confに

WITH_BDB_VER=44

を追記した後、

portupgrade -fr 'db4*' -x 'databases/db4*'

で依存しているpackageを一気に更新した。このportupgrade手順では、apacheやpostfixなど、db44に追随出来ないportsまで再makeしてしまうので、ちとムダなのだが、今回の作業はそれなりに速いCPUを積んだpackageサーバ上で、-pオプション付きで行なっていて、他のマシンはこれで作成したpackageを使ってportupgradeするので気にしなかった。

portupgrade完了後、

  • ruby18-bdb1
  • db{41,42}

あたりをpkg_deinstallした。db43はdb44に追随出来ないapacheやpostfixが依存していたので手を着けず、そのまま。

_ Class::Accessorにおけるデフォルト値

あまりにも初心者すぎて、ちと恥ずかしいのだが、勉強の記念に書いておく。

Perlの勉強はあまり進んでいないのだが、ググって見付けた元祖 サトシのブログ : Class::Accessor で setter, getter を自動生成に書かれているClass::AccessorがPerl Best Practicesの書法にも対応していて便利そう。

ただ、どうやってインスタンス変数にデフォルト値をセットすればいいのか分からず、しばらく悩む。で、たぶん、newメソッドをオーバーライドすれば良いんじゃなかろうかと思い付いたので、こんなのを書いてみた。

#!/usr/bin/perl -w

use strict;

{
    package Animal;
    use base qw(Class::Accessor);
    __PACKAGE__->follow_best_practice;
    __PACKAGE__->mk_accessors(qw(name color));

    sub new {
        my ($self, $args_ref) = @_;

        $args_ref->{name} = "an unnamed $self" unless (exists $args_ref->{name});
        $args_ref->{color} = "brown" unless (exists $args_ref->{color});
        return $self->SUPER::new($args_ref);
    }
}

{
    package Tiger;
    use base qw(Animal);
}

my $tiger = Tiger->new;
print $tiger->get_name . "\n";
print $tiger->get_color . "\n";

my $tiger2 = Tiger->new( { name => "tora", color => "white" } );
print $tiger2->get_name . "\n";
print $tiger2->get_color . "\n";

動かしてみたところ、とりあえず意図した通りには動いた(これで正しいのか分からないけれど)。

[]
本日のPingbacks(全0件)

トップ «前の日記(2006-07-04(Tue)) 最新 次の日記(2006-07-06(Thu))» 編集