カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

久しぶりに真面目に Perl を書いた

と言うお話。


今日、なんか久々に、

プログラミングを面と向かって取り組むかー

という気持ちが復活してて、とりあえず以前から作ろうと思ってたモノを書き始めました。

それで、最初は plenv とか perl-build とか使って、最新の Perl をサクっと入れて……、 と考えていたんですが、NixOS という若干特殊なパス環境を使っている影響か、

どうにも Perl のコンパイルが出来ねー!

という状態になっていて、実際には外部のヘッダファイルが云々なエラーが出ていたので、

これどう考えても NixOS のパス環境が特殊な影響ですよねー

って感じでした。

そのため、とりあえず Perl と cpanm はシステムが提供しているモノを使って、 carton のパッケージ定義を足す、という様な事を行って、Perl の開発環境を整えました。 そして、それ故に、開発時間よりも、開発環境を整える時間の方が食ってしまったと言う。

なお、実際に NixOS で carton をシステムにインストールするのに使ったパッケージ定義は下記の様な感じです:

    perlPackages = let self = _self // perlPackages; _self = with self; {
      Carton = buildPerlPackage rec {
        version = "v1.0.28";
        name    = "carton-${version}";
        src     = fetchurl {
          url     = "mirror://cpan/authors/id/M/MI/MIYAGAWA/Carton-${version}.tar.gz";
          sha256  = "0gjswy424z22c8cw93x6wlpmvb6niqkajs91b76a20scc05pjndw";
        };
        propagatedBuildInputs = with perlPackages; [
          JSON ModuleMetadata ModuleCPANfile TryTiny Parent GetoptLong ClassTiny PathTiny
          Appcpanminus CPANMeta CPANMetaRequirements ModuleCoreList ModuleReader
        ];
      };

      ClassTiny = buildPerlPackage rec {
        version = "1.006";
        name    = "Class-Tiny-${version}";
        src     = fetchurl {
          url = mirror://cpan/authors/id/D/DA/DAGOLDEN/Class-Tiny-1.006.tar.gz;
          sha256 = "0knbi1agcfc9d7fca0szvxr6335pb22pc5n648q1vrcba8qvvz1f";
        };

        propagatedBuildInputs = [
          Carp
        ];
      };

      ModuleCPANfile = buildPerlPackage rec {
        version = "1.1002";
        name    = "Module-CPANfile-${version}";
        src     = fetchurl {
          url = mirror://cpan/authors/id/M/MI/MIYAGAWA/Module-CPANfile-1.1002.tar.gz;
          sha256 = "1z9wsps70h7ypaxmwq8l8wp0dg4kqrxmaqgzbh2fq8jw9idw55dz";
        };

        propagatedBuildInputs = [
          CPANMeta JSON Parent
        ];
      };

      ModuleReader = buildPerlPackage rec {
        version = "0.003002";
        name    = "Module-Reader-${version}";
        src     = fetchurl {
          url = mirror://cpan/authors/id/H/HA/HAARG/Module-Reader-0.003002.tar.gz;
          sha256 = "1pn0q5qh9jy5jy2bbvjpyv3m5j11qvsf8q8arzaga009g6a9szd6";
        };

        propagatedBuildInputs =  [
          ScalarListUtils 
        ];
      };

    }; in self ;

ちなみに、このコードは実際には手書きで作ってたりしたんですが、後で調べると cpan から nix の定義を作る、 という様なツールが NixOS の公式に存在していたので、あんまり手作業でする必要はなかったかなー、 と今としては考えています。が、手作業でも目的は達せたので、とりあえずは問題なかったけれども。


それで、そんなこんなで Perl の開発環境を整えるのに手間取ったりはしたものの、 久しぶりに Perl を書いた感想としては、

あー、プログラミングってこういう感じで楽しいんだよなー

と、思い出した、と言うか、思い返せたので、まあ今日取り組んで正解だったなーと。 なんか、こう、色々と面倒に考えずに、サクっと作り始める、と言うのは、 こういう楽しさが有ったんだっけ、みたいな感じ。

ただ、実際には今日の作成を始めるより以前に、モノのアイディアだけはまとめてあったりしたんで、 その辺りの過程はすっ飛ばしていたりはするんですけどね。まあ、その辺りだけはぬかり無く、って感じです。はい。


とりあえず、今日はそんな感じで、

プログラミングを楽しむ

と言う感覚が取り戻せたんで、まだボチボチと色々作って行こうかなーとか考えています。はい。