tôi phải kiểm tra hashrefs như thế này mộtSo sánh và xác nhận cấu trúc dữ liệu
{ foo => 65, bar => 20, baz => 15 }
chống lại một arrayref của hashrefs bày tỏ những điều kiện như thế này
[
{ foo => { "<=" => 75 } },
{ bar => { "==" => 20 } },
{ baz => { ">=" => 5 } },
]
và trả về giá trị đúng nếu tất cả các điều kiện được đáp ứng.
Cả hai cấu trúc dữ liệu đều không được xác định trước. Một được xây dựng từ phân tích cú pháp một chuỗi trong cơ sở dữ liệu, một chuỗi khác phân tích cú pháp đầu vào của người dùng.
Trong trường hợp trên, tôi sẽ trở thành sự thật, nhưng nếu tôi đã kiểm tra các hashref chống
[
{ foo => { "<=" => 60 } },
{ bar => { "==" => 20 } },
{ baz => { ">=" => 5 } },
]
tôi sẽ trả về false, vì foo trong hashref đầu tiên không phải là < = 60.
Các câu hỏi là: chiến lược tốt nhất để làm điều đó là gì?
Tôi đang nghĩ đến việc
- xây dựng một loạt các subrefs qua eval
- kiểm tra đối với một trong những phù hợp trong 5 subrefs pre-xây dựng khác nhau (một cho mỗi trường hợp cho>, <, < =,> = và ==)
Tôi có đi sai đường dẫn không? và nếu không, các chức năng tốt nhất, eval hoặc được tạo sẵn là gì?
Tôi đã xem xét Params :: Validate nhưng tôi lo ngại rằng nó muốn được rất nhiều chi phí, và tôi sẽ phải xây dựng các callbacks anyway.
Một mảng các tham chiếu băm đơn sẽ chỉ hữu ích nếu bạn có các khóa trùng lặp. Ví dụ. '[{foo => ...}, {foo => ...}]' Tôi nghi ngờ bạn không có các khóa trùng lặp, điều này làm cho dự phòng này trở nên thừa và bạn có thể chỉ cần sử dụng băm và bỏ qua mảng đó. – TLP