Perlでconstant(定数)をhashのキーに使う

2021-04-19
perl
    

目次

概要

Perlでconstant(定数)をhashのキーに使う方法でハマりました。その時の解決方法です。

ハマった事象

例えば以下のようなコードがあったとします。

use constant VAR_1 => 'var_2';

my $hash_ref = {
    VAR_1 => 'hoge'
};

print $hash_ref;

ここで期待する出力はvar_2をキーとするハッシュ(リファレンス)を想定していましたが、実際にはVAR_1がキーとなっていました。

# 期待していた値
$VAR1 = {
          'var_2' => 'hoge'
        };
# 実際に定義された値
$VAR1 = {
          'VAR_1' => 'hoge'
        };

解決方法

1 括弧をつける

Perlのconstantはサブルーチンと同じ扱いとなるようなので、括弧をつけて呼び出します。

use constant VAR_1 => 'var_2';

my $hash_ref = {
    VAR_1() => 'hoge'
};

print $hash_ref;
# $VAR1 = {
#           'var_2' => 'hoge'
#         };

2 & をつける

use constant VAR_1 => 'var_2';

my $hash_ref = {
    &VAR_1 => 'hoge'
};

print $hash_ref;
# $VAR1 = {
#           'var_2' => 'hoge'
#         };

参考にしたサイト

Is there any way to use a “constant” as hash key in Perl?

[Perl]定数をHashのKeyに使用するときの注意点

constant - 定数を宣言するための Perl プラグマ - perldoc.jp

    
s-yoshiki
s-yoshiki
githubtwitterqiita
Web作ってますが、インタラクティブなプログラミングも好きです。
JavaScript / Vue / node.js / PHP / AWS / OpenCV

関連記事

CentOS8にDNFでPerl5.30のインストール
Modularityについて Perl5.30インストール dnf module でハマったところ その他 Perl5.26の場合 Perl5.24の場合 CentOS8 or CentOS Streamに Perl5.30をDNF…

CentOS8とcpanm(cpanminus)によるPerlモジュールの導入・環境構築
cpanmについて cpanmのインストール (DNFでインストール) cpanmのインストール (shell経由でインストール) cpanmのインストール (cpan経由) cpanmでCPANモジュールをインストール 参考にしたサイト おまけ cpanm…

CentOS7 に Perl + CPAN 環境を構築
環境 Perl関連rpmインストール CPANの起動と設定 CentOS7 に Perl + CPAN 環境を構築する。\nPerl は CentOS7 標準 (5.16.3 ) を利用する。 環境 CentOS Linux release 7.7.190…

CentOS7 に Perl環境を構築する
環境 Perlインストール Docker上のCentOS7 に Perl および 重要なrpm類を尾インストールしPerl環境を構築する。 環境 CentOS7\n\nPerl 5.16.3 (CentOS標準) Perl…

最新の投稿

Python poetryでパッケージ開発 PyPIで公開 Pytestでテスト CIをGitHub Actionsで回す
Poetry でパッケージ開発 pytest でユニットテストを実施しカバレッジを算出する パッケージをビルドし PyPI で公開する 検証環境にデプロイする 本番環境にデプロイする GitHub Actions で CI を回す codecovの設定 GitHub…

Perlでconstant(定数)をhashのキーに使う
ハマった事象 解決方法 1 括弧をつける 2 & をつける 参考にしたサイト Perlでconstant(定数)をhash…

php-fpmのステータスページを表示 Apache & htaccess
試した環境 php-fpm の pm.status_path について php-fpmのconfの設定 .htaccess の設定 アクセスしてみる 参考にしたサイト Apache環境で php-fpm のステータスページを htaccess…

DBクライアントツールはDBeaverをおすすめしたい
DBeaver について 特徴 対応DB 対応OS 利用環境 アーカイブ インストール windows mac Linux コネクションの作成 SQLを実行する その他 CloudBeaverについて 今までいくつかのDB…

CentOS8 に Oracle12.2 clientをインストールする
実施した環境 セットアップ clientツールの 準備 インストール 環境変数にパスを通す 実行 libnsl.so.1: cannot open shared object file と表示される場合 CentOS8 に Oracle12.2 client…

フェールセーフやフェールソフト・フールプルーフ 障害対策用語の整理

JSで32ビット符号付き整数に対してのビット演算でハマった
具体例 参考にしたサイト JSでサブネットマスクの計算を行おうとしたとき、ビット演算でハマりました。その時のメモです。 JSでサブネットマスクの計算 JSでビット演算子を利用する場合 3…

Gitにプロキシを設定する
プロキシを設定する 確認 Gitでプロキシを通しておくメモです。 プロキシを設定する 以下のコマンドでproxyを通します。 ※ がプロキシのURL…

JSでIPアドレスがサブネットマスクで指定した範囲内にあるか判定する
IPアドレスが指定した範囲内にあるかどうか判定 参考にしたサイト JSでIPアドレス(IPv4)が指定したサブネットの範囲に含まれるか判定するロジックを作った時の記録です。 IPアドレスが指定した範囲内にあるかどうか判定 処理としては、IP…

プログラムの数値計算で発生する誤差の種類 丸め誤差・打ち切り誤差・桁落ち
はじめに 誤差の種類 丸め誤差 打ち切り誤差 桁落ち 情報落ち 桁溢れ誤差 参考にしたサイト コンピュータで出てくる誤差はいくつかありますが、 それらをコードに落として整理しました。 はじめに 例えば の計算の答えは 0.6666666666…

Tags

Dates

© 2021   404 motivation not found