muszę sprawdzić hashrefs jak tenPorównywanie i uwierzytelnianiu struktury danych
{ foo => 65, bar => 20, baz => 15 }
przeciwko arrayref z hashrefs wyrażając warunki jak ten
[
{ foo => { "<=" => 75 } },
{ bar => { "==" => 20 } },
{ baz => { ">=" => 5 } },
]
i zwraca wartość true, jeśli są spełnione wszystkie warunki.
Żadna z dwóch struktur danych nie została wcześniej określona. Jeden jest zbudowany z analizowania łańcucha w bazie danych, a drugi z analizy składni użytkownika.
W powyższym przypadku, chciałbym powrócić prawda, ale gdybym sprawdził hashref przeciwko
[
{ foo => { "<=" => 60 } },
{ bar => { "==" => 20 } },
{ baz => { ">=" => 5 } },
]
bym return false, ponieważ foo w pierwszym hashref nie jest < = 60.
The Pytanie brzmi: jaka jest najlepsza strategia na zrobienie tego?
Myślę
- budowy serię subrefs poprzez eval
- sprawdzanie przed odpowiednim jednym spośród 5 różnych gotowych subrefs (jeden na razie dla>, <, < =,> = i ==)
Czy zmierzam w złym kierunku? a jeśli nie, jakie są najlepsze, eval czy wbudowane funkcje?
Zajrzałem do Params :: Validate, ale obawiam się, że to będzie dużo kosztów ogólnych, i tak czy inaczej będę musiał budować callbacki.
Tablica pojedynczych znaków krzyżyka byłaby przydatna tylko wtedy, gdy byłyby zduplikowane klucze. Na przykład. '[{foo => ...}, {foo => ...}]' Podejrzewam, że nie masz duplikatów kluczy, co powoduje, że jest to zbędne i prawdopodobnie powinieneś użyć skrótu, i pomiń tablicę. – TLP