標量參考
一個參考是一個標量變數(一個由 $
字首),其是指一些其它資料。
my $value = "Hello";
my $reference = \$value;
print $value; # => Hello
print $reference; # => SCALAR(0x2683310)
要獲取引用的資料,請取消引用它。
say ${$reference}; # Explicit prefix syntax
say $$reference; # The braces can be left out (confusing)
Version >= 5.24.0
新的字尾解除引用語法,預設情況下從 v5.24 開始提供
use v5.24;
say $reference->$*; # New postfix notation
然後可以像原始變數一樣改變這個去參考值。
${$reference} =~ s/Hello/World/;
print ${$reference}; # => World
print $value; # => World
參考總是真實的 - 即使它所指的值是假的(如 0
或 ""
)。
你可能需要標量參考如果:
-
你希望將字串傳遞給函式,並讓它為你修改該字串而不是返回值。
-
你希望明確避免 Perl 在函式傳遞的某個時刻隱式複製大字串的內容(特別是在沒有寫時複製字串的舊 Perls 上相關)
-
你希望從傳達內容的字串中消除具有特定含義的字串式值的歧義,例如:
- 從檔案內容中消除檔名的歧義
- 消除返回的錯誤字串中返回的內容的歧義
-
你希望實現一個輕量級的內部物件模型,其中傳遞給呼叫程式碼的物件不攜帶使用者可見的後設資料:
our %objects; my $next_id = 0; sub new { my $object_id = $next_id++; $objects{ $object_id } = { ... }; # Assign data for object my $ref = \$object_id; return bless( $ref, "MyClass" ); }