內容

名稱

Tie::Array - 繫結陣列的基底類別

語法

package Tie::NewArray;
use Tie::Array;
@ISA = ('Tie::Array');

# mandatory methods
sub TIEARRAY { ... }
sub FETCH { ... }
sub FETCHSIZE { ... }

sub STORE { ... }       # mandatory if elements writeable
sub STORESIZE { ... }   # mandatory if elements can be added/deleted
sub EXISTS { ... }      # mandatory if exists() expected to work
sub DELETE { ... }      # mandatory if delete() expected to work

# optional methods - for efficiency
sub CLEAR { ... }
sub PUSH { ... }
sub POP { ... }
sub SHIFT { ... }
sub UNSHIFT { ... }
sub SPLICE { ... }
sub EXTEND { ... }
sub DESTROY { ... }

package Tie::NewStdArray;
use Tie::Array;

@ISA = ('Tie::StdArray');

# all methods provided by default

package main;

$object = tie @somearray,'Tie::NewArray';
$object = tie @somearray,'Tie::StdArray';
$object = tie @somearray,'Tie::NewStdArray';

說明

此模組提供陣列繫結類別的方法。請參閱 perltie 以取得繫結陣列至套件所需函式的清單。基本的 Tie::Array 套件提供空的 DESTROYEXTEND 方法,空的 DELETEEXISTS 方法會在繫結陣列上呼叫 delete() 或 exists() 內建函式時 croak(),以及 PUSHPOPSHIFTUNSHIFTSPLICECLEAR 的實作,這些實作是根據基本的 FETCHSTOREFETCHSIZESTORESIZE

Tie::StdArray 套件提供繫結陣列所需的高效率方法,這些陣列實作為受祝福的參考,指向「內部」perl 陣列。它繼承自 Tie::Array,且應使繫結陣列的行為與標準陣列完全相同,允許選擇性地覆寫方法。

對於想要撰寫自己的繫結陣列的開發人員,以下簡要定義所需的方法。請參閱 perltie 部分以取得更詳細的說明,以及範例程式碼

TIEARRAY classname, LIST

類別方法由指令 tie @array, classname 呼叫。將陣列實例與指定的類別關聯。LIST 會表示完成關聯所需的額外引數(例如 AnyDBM_File 和同類項)。該方法應傳回提供以下方法的類別的物件。

STORE this, index, value

將資料 value 儲存在與物件 this 關聯的繫結陣列的 index 中。如果這會讓陣列變大,則類別的 undef 對應應傳回給新位置。

FETCH this, index

擷取與物件 this 關聯的繫結陣列中 index 的資料。

FETCHSIZE this

傳回與物件 this 關聯的繫結陣列中的項目總數。(等於 scalar(@array))。

STORESIZE this, count

將與物件 this 關聯的繫結陣列中的項目總數設定為 count。如果這會讓陣列變大,則類別的 undef 對應應傳回給新位置。如果陣列變小,則應刪除超過 count 的項目。

EXTEND this, count

告知呼叫陣列可能會增加到有 count 個項目。可用於最佳化配置。此方法無需執行任何動作。

EXISTS this, key

驗證繫結陣列 this 中索引 key 的元素是否存在。

Tie::Array 實作是一個單純會 croak 的 stub。

DELETE this, key

從繫結陣列 this 中刪除索引 key 的元素。

Tie::Array 實作是一個單純會 croak 的 stub。

CLEAR this

清除與物件 this 關聯的繫結陣列中的所有值(移除、刪除、...)。

DESTROY this

正常的物件解構函式方法。

PUSH this, LIST

將 LIST 的元素附加到陣列。

POP this

移除陣列的最後一個元素並傳回它。

SHIFT this

移除陣列的第一個元素(向下移動其他元素)並傳回它。

UNSHIFT this, LIST

在陣列的開頭插入 LIST 元素,並將現有的元素向上移動以騰出空間。

SPLICE this, offset, length, LIST

對陣列執行等同於 splice 的操作。

offset 是可選的,預設為零,負值從陣列的結尾開始倒數。

length 是可選的,預設為陣列的其餘部分。

LIST 可以是空的。

傳回在 offset 處的原始 length 元素的清單。

CAVEATS

目前不支援綁定的 @ISA。在用於注意到 @ISA 設定和用於實作 'tie' 所需的魔法項目之間存在潛在衝突。

作者

Nick Ing-Simmons <nik@tiuk.ti.com>