內容

名稱

Test2::Util - Test2 和朋友使用的工具。

說明

Test2 和朋友使用的工具集合。

匯出

所有匯出都是選用的。您必須指定要匯入的子程式。

($success, $error) = try { ... }

評估程式碼區塊,傳回成功或失敗,以及錯誤訊息。此程式碼會保護 $@ 和 $!,它們會在執行結束時還原。此程式碼也會暫時封鎖 $SIG{DIE} 處理常式。

protect { ... }

類似於 try,但它不會捕捉例外。此處的想法是保護 $@ 和 $! 不被變更。只要執行成功,$@ 和 $! 就會還原到執行前的狀態。如果執行失敗,$! 仍會還原,但 $@ 會包含引發的例外。

CAN_FORK

如果此系統能夠進行真實或偽執行緒 fork,則為 True。

CAN_REALLY_FORK

如果系統可以真正 fork,則為 True。對於 fork 是模擬的系統,這將為 false。

CAN_THREAD

如果此系統能夠使用執行緒,則為 True。

USE_THREADS

如果啟用執行緒,則傳回 true,如果未啟用,則傳回 false。

get_tid

如果啟用了執行緒,這將傳回目前的執行緒 ID,否則傳回 0。

my $file = pkg_to_file($package)

將套件名稱轉換為檔案名稱。

$string = ipc_separator()

取得 IPC 分隔符號。目前這始終是字串 '~'

$string = gen_uid()

產生一個獨特 ID (不是 UUID)。這通常會是程序 ID、執行緒 ID、時間和一個遞增整數,全部使用 ipc_separator() 連結起來。

這些 ID 對於大多數目的而言都夠獨特。要產生相同的 ID,您必須有 2 個具有相同 PID 的程序在相同時間產生 ID,且遞增整數的目前狀態相同。這是跨多部機器發生的合理情況,但在一部機器上發生的機率很低。

如果一個程序產生一個 ID,呼叫 exec,然後在 exec 後再次執行,且所有這些動作在不到一秒內完成,則可能會無法產生獨特 ID。如果系統程序 ID 在不到一秒內循環,讓 2 個使用這個產生器的不同程式在不到一秒內使用相同的 PID 執行,也可能會發生這種情況。這兩種情況發生的機率都很低。如果您需要通用獨特 ID,或在這些條件下仍然獨特的 ID,請參閱 Data::UUID

($ok, $err) = do_rename($old_name, $new_name)

重新命名一個檔案,這會以一種方式包裝 rename(),讓它在您嘗試重新命名最近變更的檔案時,在跨平台時更可靠。

($ok, $err) = do_unlink($filename)

取消連結一個檔案,這會以一種方式包裝 unlink(),讓它在您嘗試取消連結最近變更的檔案時,在跨平台時更可靠。

($ok, $err) = try_sig_mask { ... }

使用多個遮罩訊號完成一個動作,它們會在最後取消遮罩,讓任何被攔截的訊號都能被處理。

這主要用於您需要讓多個動作成為原子動作(無論如何,針對某些訊號)時。

被攔截的訊號

SIGINT
SIGALRM
SIGHUP
SIGTERM
SIGUSR1
SIGUSR2

備註和注意事項

5.10.0

Perl 5.10.0 在使用較新的 gcc 版本編譯時會發生錯誤。此錯誤會在每次啟動新執行緒時導致區段錯誤。Test2 會嘗試偵測此錯誤,並在偵測到時指出系統無法分岔。

Devel::Cover

Devel::Cover 不支援執行緒。如果在第一次執行檢查之前載入 Devel::Cover,CAN_THREAD 會傳回 false。

原始碼

Test2 的原始碼儲存庫可以在 http://github.com/Test-More/test-more/ 找到。

維護人員

Chad Granum <exodist@cpan.org>

作者

Chad Granum <exodist@cpan.org>
Kent Fredric <kentnl@cpan.org>

版權

版權所有 2020 Chad Granum <exodist@cpan.org>。

此程式為自由軟體;您可以在與 Perl 相同的條款下重新散布或修改它。

請參閱 http://dev.perl.org/licenses/