內容

名稱

ODBM_File - 與 odbm 檔案的繫結存取

語法

use Fcntl;   # For O_RDWR, O_CREAT, etc.
use ODBM_File;

 # Now read and change the hash
 $h{newkey} = newvalue;
 print $h{oldkey}; 
 ...

 untie %h;

說明

ODBM_File 在 Perl hash 變數與 ODBM_File 格式的檔案之間建立連線;您可以像操作 Perl hash 一樣操作檔案中的資料,但當程式結束時,資料會保留在檔案中,供下次執行程式時使用。

使用 Perl 內建的 tie 函數搭配 ODBM_File 來建立變數與檔案之間的連線。tie 的參數應為:

  1. 您要繫結的 hash 變數。

  2. 字串 "ODBM_File"。(這會指示 Perl 使用 ODBM_File 套件來執行 hash 的功能。)

  3. 您要繫結到 hash 的檔案名稱。

  4. 旗標。使用下列其中一個:

    O_RDONLY

    檔案中資料的唯讀存取權。

    O_WRONLY

    檔案中資料的唯寫存取權。

    O_RDWR

    同時讀取和寫入存取。

    如果您想要在檔案不存在時建立檔案,請將 O_CREAT 新增到任何這些,就像範例中一樣。如果您省略 O_CREAT 而檔案尚未存在,則 tie 呼叫會失敗。

  5. 如果建立新檔案時要使用的預設權限。實際權限會由使用者的 umask 修改,因此您可能應該在此處使用 0666。(請參閱 perlfunc 中的「umask」。)

診斷

失敗時,tie 呼叫會傳回未定義的值,並可能會設定 $! 以包含無法繫結檔案的原因。

odbm store 傳回 -1,errno 22,在 ... 的金鑰 "..."

當您嘗試儲存太長的鍵或值時,會發出此警告。這表示變更未記錄在資料庫中。請參閱下方的錯誤和警告。

安全性與可攜性

請勿接受來自不受信任來源的 ODBM 檔案。

在現代 Linux 系統上,這些通常是 GDBM 檔案,它們無法跨平台移植。

GDBM 文件並未暗示來自不受信任來源的檔案可以使用 libgdbm 安全使用。

不使用 GDBM 相容性來支援舊 dbm 的系統將使用特定於平台的函式庫,可能繼承自 BSD 系統,其中使用不受信任的檔案可能或可能不安全。

惡意製作的檔案可能會導致 perl 崩潰,甚至暴露安全漏洞。

錯誤和警告

您可以儲存在 ODBM 檔案中的資料大小有一些限制。最重要的是,金鑰的長度加上其關聯值的長度不得超過 1008 個位元組。

請參閱 perlfunc 中的「tie」perldbmfilterFcntl