Const::Common探訪
TIME rest time current/total
TopicsPlaceHolder

Const::Common探訪

Kichijoji.pm #14

Mar 25th, 2018

Profile

songmu

宣伝

WEB+DB PRESS Vol.104 の Perl Hackers Hubに「Minillaを使ったモダンなCPANモジュール開発」という記事を寄稿しました

お願い

次回のPerl Hackers Hubの執筆者を探しています!!!

検索と言えば

最近作ったもの

Const::Common

プロジェクト共通の定数を簡単に宣言できるモジュール

→ import機構を無理やりなんとかするのと、resticted hash/array にすることで解決

定数を定義

package MyApp::Const;
use Const::Common (
    MYAPP_BAR => 'BAZ',
    MYAPP_HASH => {
        HOGE => 'hoge',
    },
);
1;

利用

use MyApp::Const;
print MYAPP_BAR; # BAZ
print MYAPP_HASH->{HOGE}; #=> hoge;
MYAPP_HASH->{HOGE} = 10;  # ERROR!

内部実装

package Const::Common;
require Exporter;
use Data::Lock ();

sub import {
    my $pkg   = caller;
    shift;
    my %constants = @_ == 1 ? %{ $_[0] } : @_;

    Data::Lock::dlock my $locked = \%constants;
    {
        no strict 'refs';
        push @{"$pkg\::ISA"}, ('Exporter');
        push @{"$pkg\::EXPORT"}, (keys %$locked);
    }

    require constant;
    @_ = ('constant', $locked);
    goto constant->can('import');
}

考えたこと

We are Hiring

hatena