讓我們打破這成碎片......
首先,創建這驗證結構的功能:
sub validate
{
my ($data) = @_;
# always return true for now
return 1;
}
現在讓我們開始在位填充......你要使用過濾器名稱作爲驗證檢查的一部分,所以讓我們補充說,作爲一個參數:
sub validate
{
my ($data, $filter_name) = @_;
# always return true for now
return 1;
}
之前做別的什麼,那將是有意義的檢查,如果該過濾器名稱存在作爲重點;如果沒有,驗證失敗:
sub validate
{
my ($data, $filter_name) = @_;
return if not exists $data->{$filter_name};
# otherwise, return true
return 1;
}
現在還要檢查是否有值。由於散列鍵中的定義是'存在'的超集(定義的任何值都必須存在,但並非每個存在的值都需要定義 - 因爲undef可能是該值),所以可以省略第一個檢查:
sub validate
{
my ($data, $filter_name) = @_;
return if not defined $data->{$filter_name};
# otherwise, return true
return 1;
}
我們已經檢查了FILTER_NAME關鍵是存在於數據,並將其定義,但尋找一個更深層次之前,我們需要確認它真的是一個hashref:
sub validate
{
my ($data, $filter_name) = @_;
return if not defined $data->{$filter_name};
return if ref $data->{$filter_name} ne 'HASH';
# otherwise, return true
return 1;
}
現在在過濾器名稱下查找'filter_actions'和'filter_criteria'鍵:
sub validate
{
my ($data, $filter_name) = @_;
return if not defined $data->{$filter_name};
return if ref $data->{$filter_name} ne 'HASH';
return if not defined $data->{$filter_name}{filter_actions};
return if not defined $data->{$filter_name}{filter_actions};
# otherwise, return true
return 1;
}
就是這樣!請務必閱讀使用perldoc perlreftoot,perldoc perlref和perldoc perldsc中的perl數據結構。
問題標題似乎並不符合您實際要求 - 你在哪裏需要計數元素? – Ether 2011-02-04 18:10:08