スクリプトのお勉強 失敗談

unconstant – perlライブラリ

投稿日:

ちょっとだけperlの機能修正をしたので、そのときに使用したライブラリについて書こうと思います。

perlのunconstant です。

use constantの解除

use constantとは固定値(普通の実装では大文字の変数)を指定するライブラリですが、これは、use constantを解除する機能です。つまり、その固定値を別の値にするライブラリになります。

具体例

具体例で説明してみます。例えば、perlで単体テストを書こうとした時、テスト対象の実装が以下のようにconstantにてファイルパスがフルパスで書いてあることがありえます。

use constant A=>'/usr/local/bin/B';

基本的にはいいのですが、単体テストをする際には、ファイルパスを本番のフルパスではなく、自分のホームディレクトリで動作させたい場合があります。そうでないと、別環境での単体テストをしたいときに障害になります。

例えば、 以下のようなconst.pm, a.pm, a.t, a.plの4ファイルがあったとします。

# const.pm
package const;

use constant P =>  "/usr/local/bin/bb";

1;
# a.pm
use lib ".";

use const qw/P/;

sub ab {
    print const::P;
}

1;
# a.t
use unconstant;

use lib ".";

use const;
use constant *const::P => "/home/tanino/bb";

use a qw/ab/;

ab();
# a.pl
use unconstant;

use lib ".";
use a qw/ab/;

ab();

とすると、a.pmで使用しているconst::Pを使用した、単体テストを記述する場合に、unconstantを使用した場合(a.t)と、unconstantを使用しない(a.pl)で以下のように結果が異なります。

$ perl a.t
/home/tanino/bb
$ perl a.pl
/usr/local/bin/bb

const.pmでは、/usr/local/bbになっていますが、テスト内部ではPが/home/tanino/bbになります。つまり単体テストでは、Pを変更し、本番で使用する、/usr/local/bbではなく、/home/tanino/bbに変更できたことになります。よって本番とは別の単体テストを起動できます。

基本的には使いたくない

基本的には、あまり使いたくないライブラリではありますが、レガシーシステムでは使いたくなる場合もあるかと思い、自分の記憶がてら書いておきます。

-スクリプトのお勉強, 失敗談

執筆者:

関連記事

WSL2のubuntu 22.04 LTSを24.04 LTSにアップデート

WSL2 24.04LTS アップデート

ipconfig /renewでエラーが出て、Wifiの情報を更新できない。

トラブルシュート 今回はトラブルシュートです。 奥さんのノートパソコンideapad L340 15APIの無線LANが接続できなくなりました。 で、ipconfig /renewをしても、以下のよう …

poetry installでJSONDecodeError

小ネタです。OSをアップデートしたので、その他もいろいろアップデートしようとしたらエラーになったので、メモとして書いておきます。 WSL2のUbuntuを 22.04 LTSにアップデート は、さほど …

WSL2にOpenCV + Pythonをインストールする

お手軽にやろうと思ってやってみました。作業手順自体を見ると、お手軽ではないかもしれません。 環境 インストールする/した環境は以下の通りです。 WSL2Ubuntu 20.04.2 LTSPython …

ワンライナーから使いそうなのを抜粋

ワンライナー多すぎ、、 https://linuxcommandlibrary.com/basic/oneliners は膨大なワンライナーがあっていいのですが、多すぎて、何が使えるかぱっと見分かりま …

google オプトアウト Click here to opt-out.