Помогите с Перлом!!!

Помогите с Перлом!!!

  • при сравнении строк используется eq вместо ==
    == сравнивает только числовые эквиваленты строк

    #!/usr/bin/perl

    @var1 = split /s+/, "aar kram amet set dflor";
    @var2 = split /s+/, "aar kor set lorem ispum form";

    print "полный переборn";
    for $i (@var1) {
    for $j (@var2) {
    print "$in" if $i eq $j;
    }
    }

    но через хэш будет действительно гораздо быстрее. это может быть критично при достаточно большом количестве слов.

    print "поиск по ключу хэшаn";
    %hash = map {$_, 1} @var1;
    print map {"$_n"} grep {exists $hash{$_}} @var2;

    если слово может появляться несколько раз в одном предложении и нужно не допустить повторов:

    print "без повторовn";
    %hash2 = map {$_, 1} @var2;
    print map {"$_n"} grep {exists $hash{$_}} keys %hash2;

    правда тогда собьется изначальный порядок слов: обход ключей хэша в перле происходит в произвольном порядке.

    http://ideone.com/zRigkd

  • Проще и быстрее преобразовать в хеш.
    %hash = map { $_ => 1 } @array;
    А потом уже по нему проверять используя 1 цикл и exists.