標量參考

一個參考是一個標量變數(一個由 $ 字首),其是指一些其它資料。

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" );
    }