PerlのModule, Test, Mercurial

Menu Menu


Perlの関数

fib.pl

Perlのmodule を作る

    man perlnewmod
    man perlnewmodlib

を読もう。

 Module::Starter CPAN package. 
   

を使えとか言ってくるが、cpan は遅いことが多い。ftp とかがあるとだめ。なので、

  h2xs -AX --skip-exporter --use-new-tests -n Logic::Node

が簡単。


何を作る?

Perl で論理式を計算するノードを作るライブラリを作ってみよう。

  mkdir Perl
  cd Perl
  h2xs -AX --skip-exporter --use-new-tests -n Logic::Node

すると、Logic-Node というdirectory が自動的に出来る。

    % ls
    Changes       MANIFEST      Makefile.PL   README        lib/          t/

などのファイルが自動的に作られる。

CPANを使う場合は、

    % sudo /usr/bin/cpan

cpan[1]> install Module::Starter
    % rehash
    % module-starter --module=Logic::Node  --author="Shinji KONO" --email=kono@ie.u-ryukyu.ac.jp\n

こんな感じ。結果は、同じ。


まず作るのは...

    t/Logic-Node.t

というテスト用のファイルが出来ているので、それを編集する。

    my $node = Logic::Node->new();
    ok( $node );

の二行を t/Logic-Node.t に付け加えて、new の動作を調べよう。

  lib/Logic/Node.pm 

を編集して、

    sub new {
	my $self  = shift;
	my $class = ref($self) || $self;
	return bless {}, $class;
    }

という標準的なコンストラクタを作っておこう。


そして、テスト

    perl Makefile.PL
    make
    make test

として、test をしてみる。

    t/Logic-Node....ok                                                           
    All tests successful.
    Files=1, Tests=5,  0 wallclock secs ( 0.02 cusr +  0.01 csys =  0.03 CPU)

などと出れば Ok。


変数ノードを作る

変数ノードは値を持つノードで、

    setValue(value)
    value

のアクセサ(accessor)を持つ。

まず、テストを書こう

    use Test::More tests => 5;
    BEGIN { use_ok('Logic::Node') ; 
	    use_ok('Logic::Node::Var') ;
    };
    my $var = Logic::Node::Var->new();
    ok( $var->setValue(1) );
    ok( $var->value(1) == 1);

等とする。

このテストが通れば良い。

    lib/Logic/Node/Var.pm 

を作成しよう。(Node.pm をコピーして作るのが簡単)

    package Logic::Node::Var;
    use base qw(Logic::Node);
    sub new {
	my $self  = shift;
	my $class = ref($self) || $self;
	return bless {}, $class;
    }
    sub setValue {
	my ($self,$value) = @_;
	$self->{value} = $value;
	$self;
    }
    sub value {
	my ($self) = @_;
	$self->{value};
    }

という感じ。


MANIFEST を変更する

付け加えた lib/Logic/Node/Var.pm をMANIFESTに加える。こうしないと、これが package の一部だと言うことがわからない。

    perl Makefile.PL
    make
    mate test

という手順になる。


テストが通ったら

Mercurial で version 管理しよう。

    hg init
    hg clone ../Perl ssh://kono@xxx.ie.u-ryukyu.ac.jp//Mercuiral-Repository/Perl

以下にあります。
    http://ie.u-ryukyu.ac.jp/hg/index.cgi/teacher/kono/software/ex/Perl/


問題2.1

Perl による Logic Node


EasyPackage

システムを構築する時に、その構築 Know How 自体をシステムとして残しておく。

EasyPackage の使い方


Mercurial の動かし方

Mercurial を installして、hg のpath が正しく通っているようにする。

Server 側でも正しく path が通ってhg が動作することを確認する。

~/.hgrc に

    [extensions]
    hgext.convert=
    [ui]
    username = Shinji KONO <kono@ie.u-ryukyu.ac.jp>
    ssh = ssh -C

などと記述しよう。

repository は、提出課題毎に作り、

    ssh://futenma.ie.u-ryukyu.ac.jp///net/home/hg/y08/e085702/kadai00

等と言う形で記述する。Mercurial を課題毎に細かく分けないと、全部をcloneしてから、そこで探す羽目になってしまう。

    http://ie.u-ryukyu.ac.jp/hg/

からアクセス出来るので、そちらを直接参照する必要はありません。

Shinji KONO / Mon Dec 16 16:48:51 2019