1. ホーム
  2. perl

[解決済み] Perlで「ハッシュの代入の要素数が奇数である」という警告が出る

2022-02-09 05:40:02

質問

次のような構文を使用すると、警告が表示されます。

my %data_variables = ("Sno." => (5,0),
                "ID" => (20,1), 
                "DBA" => (50,2), 
                "Address" => (80,3), 
                "Certificate" => (170,4),
            );

しかし、同様の構文を使用しても同様の警告は表示されません。

my %patterns = ("ID" => ("(A[0-9]{6}?)"),
                "Address" => (">([^<]*<br[^>]+>[^<]*)<br[^>]+>Phone"),
                "Phone" => ("Phone: ([^<]*)<"),
                "Certificate" => ("(Certificate [^\r\n]*)"),
                "DBA" => ("<br[^>]+>DBA: ([^<]*)<br[^>]+>"),
            );  

解決方法は?

括弧を角括弧に変更する必要があります。

my %data_variables = (
    "Sno."        => [5,0],
    "ID"          => [20,1], 
    "DBA"         => [50,2], 
    "Address"     => [80,3], 
    "Certificate" => [170,4],
);

ハッシュ値はスカラー値でなければならないので、数値のリストは配列の参照として保存する必要があります(そのため角括弧で囲みます)。

2番目の例では、括弧は余計であり、問題を混乱させるだけです。それぞれの括弧には1つのスカラー値(文字列)だけが含まれ、それぞれがハッシュ値となる。