This module does not require Password Safe to be installed, and can be used as generic "store many passwords in file encrypted with single master password" storage. Password Safe GUI, if installed, may help the user to review, modify, or delete saved passwords.

Underlying module (Crypt::PWSafe3) in fact rewrites the whole file on every save and keeps all passwords cached in memory while active. This means, that any attempts to use the file paralelly from a few programs, or from a few objects within one program, are doomed to cause lost updates. Also, all passwords from the file are kept in (unprotected) memory while keyring object is active. Therefore, it is recommended to use separate .psafe3 file for Passwd::Keyring::PWSafe3, not mixing it with normal Password Safe database, and to keep keyring object for a short time only, especially if modifications happen.

There are some limitations in Crypt::PWSafe3 handling of Password Safe format. Passwords are read and saved properly and it is possible to alternate using them from perl, and via Password Safe GUI, but some less important aspects of the format, like password expiraton policy, may be ignored. Refer to Crypt::PWSafe3 docs for more details.

Password required to unlock the file. Can be given as string, or as callback returning a string (usually some way of interactively asking user for the password). The callback gets two parameters: app and file.

If this param is missing, module will prompt interactively for this password using console prompt.

if given, asks not to save the file after every change (saving is fairly time consuming), but only when $keyring->save is called or when keyring is destroyed.

Note: it of course does not make much sense to keep app passwords in encrypted storage if master password is saved in plain text. The module most natural usage is to interactively ask for master password (and use it to protect noticeable number of application-specific passwords).

Ideas of how to workaround this obstacle are welcome. I loosely consider either caching master password per desktop session (implementing sht. similar to ssh-agent/gpg-agent or using one of those somehow), or integrating the tool with PAM to use actual system password, or both - but while it seems doable on Linux, cross platform solution is not so easy.