Các arg đầu tiên mà bạn cung cấp cho nhu cầu grep để đánh giá là đúng hay sai để cho biết đã có một trận đấu. Vì vậy, nó nên là:
# note that grep returns a list, so $matched needs to be in brackets to get the
# actual value, otherwise $matched will just contain the number of matches
if (my ($matched) = grep $_ eq $match, @array) {
print "found it: $matched\n";
}
Nếu bạn cần phải phù hợp trên rất nhiều giá trị khác nhau, nó cũng có thể là đáng để bạn xem xét đưa dữ liệu array
thành một hash
, vì băm cho phép bạn làm điều này một cách hiệu quả mà không cần phải lặp qua danh sách.
# convert array to a hash with the array elements as the hash keys and the values are simply 1
my %hash = map {$_ => 1} @array;
# check if the hash contains $match
if (defined $hash{$match}) {
print "found it\n";
}
Tôi nghĩ rằng bạn có thể tái từ này để được rõ ràng hơn - mặc dù tôi có thể xem những gì bạn có nghĩa là về đọc lại, nó ban đầu nghe có vẻ như bạn đang nói rằng 'grep' trong ngữ cảnh vô hướng trả về độ dài của' @ array'. Khi bạn (đúng) dự định, nó trả về số lần biểu thức/khối là đúng. Nếu biểu thức là * chỉ một biến * - nghĩa là không so sánh thực tế, chỉ biến '$ match', thì nó đúng cho mọi phần tử nếu biến đó là đúng (không trống, không khác, v.v.) –
@Sam : Tôi đã cố gắng để viết lại nó, hy vọng nó rõ ràng hơn bây giờ. –
@eugeney đọc tốt hơn tôi rất nhiều! –