我有一個十六進制數字的數組,我需要查看其他數字並檢查它們是否出現在數組中。現在我正在使用循環遍歷整個陣列的foreach
。有沒有辦法通過首先對數組進行排序,然後對其執行二分搜索來使其更快。在Perl數組中進行二進制搜索
此刻代碼:
sub is_bad_str{
my ($str, @keys) = @_;
my $flag = 0;
my ($key, $hex_num);
if ($str =~ m/14'h([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/;){ #'# fixes bad highlighting
$hex_num = $1;
}
if (defined $hex_num){
foreach $key (@keys){
if ($hex_num =~ /\Q$key\E/i){
$flag = 1;
last;
}
}
}
if (($flag == 0) && (defined $hex_num)){
return 1;#Bad str
}else{
return 0;#Good str
}
}
你有一個非常微妙的錯誤在那裏。匹配變量`$ 1`是* not *重置,所以一旦定義它,它將保持定義,無論是否存在正則表達式匹配。您應該檢查是否定義了「x =〜y」,以確定是否匹配 – Dancrumb 2011-01-13 08:56:29
這是功課嗎?如果是這樣,那是一回事......如果沒有,你應該使用CPAN模塊來做到這一點。 – Dancrumb 2011-01-13 08:57:32