我在類似的代碼中有一行:
my $thefilename = ${'myConfig::connection' . $argument}{thefilename};
通過thefilename另一個檔案傳遞。有人可以詳細說明'myConfig::connection'部分是什么意思嗎?那${}{};部分是什么意思?
這是遺留代碼,我對 Perl 很陌生。
uj5u.com熱心網友回復:
該代碼正在為散列構造一個變數名,然后將單個元素參考到散列。這被稱為“軟參考”,現在通常不贊成這樣做,因為有更好的方法來實作這一點。
對散列的單個元素訪問看起來像這樣,其中散列變數已經定義(或者在沒有 的情況下可能尚未定義strict):
my %hash_name;
$hash_name{$key}
有一種取消參考哈希參考的語法,您將參考括在大括號中,然后訪問您想要的鍵。這是乏味的舊“circumfix”符號:
my $ref = { a => 1, ... };
${ $ref }{$key};
如果 in 中的值$ref不是參考,Perl 可以使用該變數中的簡單字串值作為變數名。這是一個軟參考(也是 不允許的事情之一use strict):
my $ref = 'hash_name';
${ $ref }{$key};
除非您知道自己在做什么,否則您不想這樣做,這就是strict警告您的原因。
但是您可以將字串直接放在大括號中并跳過變數:
${ 'hash_name' }{$key}
或者在大括號內構造字串:
${ 'hash' . '_' . 'name' }{$key}
在您的情況下,您最終會得到:
${'myConfig::connection' . $argument}{thefilename};
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/506235.html
標籤:perl
