Perl Quiz-of-the-Week #11

Mark Jason Dominus <[email protected]> Thu, 06 Feb 2003 18:00:30 -0500
Newsgroups gmane.comp.lang.perl.qotw.quiz-of-the-week
Organization Plover Systems
Message-ID <[email protected]>

IMPORTANT: Please do not post solutions, hints, or other spoilers
        until at least 60 hours after the date of this message.
        Thanks.

IMPORTANTE: Por favor, no enviéis soluciones, pistas, o cualquier otra
        cosa que pueda echar a perder la resolución del problema hasta
        que hayan pasado por lo menos 60 horas desde el envío de este
        mensaje. Gracias.

IMPORTANT: S'il vous plaît, attendez au minimum 60 heures après la
        date de ce message avant de poster solutions, indices ou autres
        révélations. Merci.

WICHTIG: Bitte schicken Sie keine Lösungen, Tipps oder Hinweise für
        diese Aufgabe vor Ablauf von 60 Stunden nach dem Datum dieser
        Mail. Danke.

BELANGRIJK: Stuur aub geen oplossingen, hints of andere tips in de
        eerste 60 uur na het verzendingstijdstip van dit
        bericht. Waarvoor dank.

VNIMANIE: Pozhalujsta ne shlite reshenija, nameki na reshenija, i
        voobshe lyubye podskazki v techenie po krajnej mere 60 chasov
        ot daty etogo soobshenija.  Spasibo.

Qing3 Zhu4Yi4: Qing3 Ning2 Deng3Dao4 Jie1Dao4 Ben3 Xin4Xi2 Zhi1Hou4 60
        Xiao3Shi2, Zai4 Fa1Biao3 Jie3Da2, Ti2Shi4, Huo4 Qi2Ta1 Hui4
        Xie4Lou4 Da2An4 De5 Jian4Yi4.  Xie4Xie4.



----------------------------------------------------------------

We'll try something a little different this time.

Question #1:

Why does Perl have the 'defined' function?  If you want to see if a
variable contains an undefined value, why not just use something like
this this?

        if ($var == undef) { ... }



Question #2:

What's wrong with this code?

        %hash = ...;

        while (<STDIN>) {
          chomp;
          for my $key (keys %hash) {
            if ($key eq $_) {
              print "$key: $hash{$key}\n";
            }
          }
        }

Question #3:


What's wrong with this code?

        @matching_words = grep search_for($_, $text_file), @words;
        
        sub search_for {
          my ($target, $file) = @_;
          return unless open F, "<", $file;
          while (<F>) {
            return 1 if index($_, $target) >= 1;
          }
          close F;
          return;
        }