0

以下のようなコードを持つスクリプトがあります。

$shelf->print("\nStarted syncing from \"${%Family::MEMBERS}{$member}\" \n");

perl(v5.8.8) を使用して CentOS 7.0 でローカルに実行しようとすると正常に動作しますが、同じ OS で perl(v5.16.3) を使用して同じコードを実行すると、以下のエラーが発生します。

Can't use string ("6/16") as a HASH ref while "strict refs" in use at

この問題の原因となった可能性のある変更と、両方のバージョンで正しく動作するようにスクリプトを修正する最善の方法についてアドバイスをいただければ幸いです。

4

1 に答える 1

5

$BLOCK{EXPR}によって返される式によって参照されるハッシュの要素にアクセスしBLOCKます。参照が予期されるため、ブロックはスカラー コンテキストで評価されます。%Familly::MEMBERSスカラーコンテキストでの参照になる可能性はありません。(これは、偽の値またはハッシュに関する統計を説明する文字列になります。)


あなたが尋ねたこと:

印刷$memberするには、使用できます

print('$member'."\n")
  -or-
print("\$member\n")

あなたが意味した可能性があること:

の値を出力するには$member、次を使用できます

print("$member\n")

あなたが欲しいと思うもの:

%Familly::MEMBERSキーの値がの要素にアクセスするには$member:

$Familly::MEMBERS{$member}

完全修飾名を使用しても何も変わりません。構文はまだ$NAME{EXPR}です。


ちなみに「ファミリー」の「エル」は一つだけ。

于 2015-04-13T12:59:34.207 に答える