Каков идиоматический способ в Perl определить, соответствует ли строковая переменная строке в списке?

В части спецификации говорится: «Некоторые имена особенные, например, Хьюи, Дьюи, Луи и Дональд. Другие имена могут быть добавлены в любое время в течение срока службы проекта. Каждый раз, когда вы вводите одно из этих имен, воспроизводите quack.wav. "

Я мог написать ...

while (<>) {
    if ($_ =~ /Hughie|Dewey|Louis/) {
        quack() ;
    }
    elsif ($_ =~ /Donald/ {
        quack() ;
        you_re_fired_apprentice() ; # Easter egg don't tell QA
    }
}

... но, несмотря на отсутствие налога на реализацию, он выглядит WTF-y: Где двоичный поиск? Что, если бы произошло внезапное колоссальное увеличение количества имен уток? Оно вообще не будет масштабироваться!

Я мог бы создать пустые файлы, используя эти имена во временном каталоге, а затем использовать API "файл существует", но это кажется окольным путём, и я должен был убедиться, что они были удалены в конце.

Разве есть лучший способ?

7
задан Thomas L Holaday 31 January 2011 в 22:18
поделиться