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

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

2021-04-194 min read

目次

  1. 概要
  2. ハマった事象
  3. 解決方法
  4. 参考にしたサイト

概要

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

Author
githubzennqiita
ただの備忘録です。

※外部送信に関する公表事項