Params::Check - 一種通用的輸入解析/檢查機制。
use Params::Check qw[check allow last_error];
sub fill_personal_info {
my %hash = @_;
my $x;
my $tmpl = {
firstname => { required => 1, defined => 1 },
lastname => { required => 1, store => \$x },
gender => { required => 1,
allow => [qr/M/i, qr/F/i],
},
married => { allow => [0,1] },
age => { default => 21,
allow => qr/^\d+$/,
},
phone => { allow => [ sub { return 1 if /$valid_re/ },
'1-800-PERL' ]
},
id_list => { default => [],
strict_type => 1
},
employer => { default => 'NSA', no_override => 1 },
};
### check() returns a hashref of parsed args on success ###
my $parsed_args = check( $tmpl, \%hash, $VERBOSE )
or die qw[Could not parse arguments!];
... other code here ...
}
my $ok = allow( $colour, [qw|blue green yellow|] );
my $error = Params::Check::last_error();
Params::Check 是一種通用的輸入解析/檢查機制。
它允許您透過範本驗證輸入。唯一的需求是參數必須命名。
Params::Check 可以為您執行下列事項
將所有鍵轉換為小寫
檢查是否已提供所有必要的參數
設定未提供給預設值的參數
過濾掉不支援的參數,並對使用者提出警告
根據字串、正規表示式、清單或甚至子常式驗證使用者提供的參數
視需要強制執行類型完整性
Params::Check 的大部分功能來自其範本,我們將在下方討論
如您在摘要中看到的,根據您的範本,將驗證所提供的參數。
範本可以針對使用的每個鍵採取不同的規則集。
可用的規則如下
這是使用者未提供任何值時的預設值。這也是檢查類型完整性時 strict_type
將查看的類型(請見下方)。
布林旗標,表示此參數是否為必要參數。如果標示為必要但未提供,check() 將會失敗。
這會對提供的參數進行 ref()
檢查。此參數的 ref
必須與此檢查的預設值的 ref
相同才能通過。
例如,如果您堅持將陣列參考作為參數,這將非常有用。
如果此範本鍵為 true,則強制執行,如果使用者輸入提供了此鍵,其值為 defined
。這僅表示使用者不得將 undef
傳遞為此鍵的值,且等於:allow => sub { defined $_[0] && 其他測試 }
這允許您在範本中指定 常數
。即,使用者不得變更的鍵。它幾乎允許您將所有 可設定
資料保留在一個地方;Params::Check 範本。
這允許您傳遞對純量的參考,資料將儲存在其中
my $x;
my $args = check(foo => { default => 1, store => \$x }, $input);
這基本上是簡寫,表示
my $args = check( { foo => { default => 1 }, $input );
my $x = $args->{foo};
您可以變更全域變數 $Params::Check::NO_DUPLICATES 來控制是否在結果集中保留已儲存的鍵。請參閱下列的「全域變數」區段。
一組用於驗證特定資料片段的準則,如果資料片段必須遵守特定規則。
請參閱 allow()
函式以取得詳細資料。
此函式預設不會匯出,因此您必須透過下列方式要求它
use Params::Check qw[check];
或改用其完全限定的名稱。
check
會採用下列的引數清單
這是一個雜湊參考,包含範本,如 SYNOPSIS
和 Template
區段中所述。
這是命名引數雜湊的參考,需要檢查。
布林值,用於指示 check
是否應詳細說明並警告檢查中出了什麼問題。
您可以透過將封裝變數 $Params::Check::VERBOSE
設定為 true 值來啟用這個程式範圍。有關詳細資料,請參閱下列的「全域變數」區段。
check
會在失敗時傳回,或在成功時傳回已剖析引數的小寫鍵雜湊參考。
因此,呼叫檢查的典型範例如下所示
my $parsed = check( \%template, \%arguments, $VERBOSE )
or warn q[Arguments could not be parsed!];
check()
的許多行為都可以透過設定封裝變數來變更。請參閱「全域變數」區段以取得相關詳細資料。
範本中 allow
鍵所處理的函式也可獨立使用。
此函式採用第一個引數來針對測試進行測試,並採用第二個引數來採用範本中 allow
鍵也允許的任何形式的準則。
您可以對 allow 使用下列類型的值
提供的參數必須等於字串,驗證才會通過。
提供的參數必須符合正規表示式,驗證才會通過。
提供的子常式必須傳回 true,驗證才會通過,參數才會被接受。
(這對於更複雜的資料特別有用)。
提供的參數必須等於陣列 ref 的其中一個元素,驗證才會通過。陣列 ref 可以包含以上所有值。
如果鍵符合條件,則傳回 true,否則傳回 false。
傳回一個字串,其中包含上次呼叫 check
時所報告的所有警告和錯誤。
當 verbose 標記開啟時,如果你想以其他方式報告,而不是使用 carp
,這會很有用。
依據要求匯出。
Params::Check 的行為可以透過變更下列全域變數來改變
這會控制 Params::Check 是否會發出警告和說明,說明某些事情可能失敗的原因。如果你將它設定為 0,Params::Check 就不會輸出任何警告。
當 警告 已啟用時,預設值為 1,否則為 0;
這就像你可以傳遞給 check
的 strict_type
選項,它會為所有呼叫 check
的動作,在全域啟用 strict_type
。
預設值為 0;
如果你設定這個標記,未知的選項仍會存在於回傳值中,而不是被過濾掉。如果你只對幾個參數有興趣,並且想將其餘的參數直接傳遞給另一個子常式,這會很有用。
預設值為 0;
如果你設定這個標記,所有以以下方式傳遞的鍵
function( -key => 'val' );
都會移除其開頭的破折號。
如果設定為 true,範本中所有標記為要儲存在純量中的鍵,也會從結果集中移除。
預設值為 false,表示當你使用 store
作為範本鍵時,check
會將它放在你提供的純量中,以及它傳回的雜湊中。
如果設為 true,Params::Check 將不再將使用者輸入的所有鍵轉換為小寫,而是預期它們與範本提供的相同。當您要在範本中使用大小寫不同的類似鍵時,這會很有用。
請了解這會移除此模組的不區分大小寫功能。
預設為 0;
如果設為 true,Params::Check 將要求傳遞的所有值都為 defined
。如果您希望在「每個鍵」的基礎上啟用此功能,請改用範本選項 defined
。
預設為 0;
如果設為 true,Params::Check 將對範本進行健全性檢查,驗證錯誤和未知鍵。雖然對除錯非常有用,但在熱程式碼和大迴圈中可能會有點慢。
若要停用此檢查,請將此變數設為 false
。
預設為 1;
如果設為 true,Params::Check 在範本驗證期間發生錯誤時將會 croak
,而不是傳回 false
。
預設為 0;
此全域變數會修改 Params::Check::check()
傳遞給 caller()
的引數,如果您在 Params::Check::check()
周圍有自訂包裝函式,這會很有用。此值必須是整數,表示在實際函式呼叫和 Params::Check::check()
之間插入的包裝函式數目。
使用自訂堆疊追蹤的包裝函式範例
sub check {
my ($template, $args_in) = @_;
local $Params::Check::WARNINGS_FATAL = 1;
local $Params::Check::CALLER_DEPTH = $Params::Check::CALLER_DEPTH + 1;
my $args_out = Params::Check::check($template, $args_in);
my_stacktrace(Params::Check::last_error) unless $args_out;
return $args_out;
}
預設為 0;
感謝 Richard Soderberg 提升效能。
請將錯誤或其他問題回報至 <bug-params-check@rt.cpan.org>。
此模組由 Jos Boumans <kane@cpan.org> 所撰寫。
此函式庫為自由軟體;您可以在與 Perl 相同的條款下重新散布和/或修改它。