Отправляет email-рассылки с помощью сервиса Sendsay

Perl - подпишись и учись!

  Все выпуски  

Perl - подпишись и учись!


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Привет всем!

Это пятая рассылка моего сайта http://perl.bos.ru
Я благодарен тем немногим(уже больше, чем в первый раз, но надеюсь, что будет больше), которые нашли в себе смелость и подписались на мою рассылку.
Здесь я буду вам рассказывать способы программирования на языке Perl, а также всё, что с ним связано, да и вообще о сайтостроительстве.


В этом выпуске я приведу несколько полезных советов от программистов на Perl, которые (советы) я нашёл в интернете(форумах, сайтах...):
  • Проверка: если ли в файле обе искомые строки.

    Нам необходимо определить, если ли в файле обе строки текста 'george' and 'judy'?

    my ($s1, $s2);
            while (<>) {
                    exit 0 if ($s1 ||= /george/) & ($s2 ||= /judy/);
            }
            die "not found\n";

    Соль этого фрагмента в использовании операторов ||= (ИЛИ-присвоение) и & (побитовый И). Программа считывает файл по строкам в переменную $_ оператором <>. Как только встретится строка 'george', переменной $s1 будет присвоено значение 1 (истина). Не забывайте, что оператор $s1 ||= /george/ означает то же, что и $s1 = $s1 || /george/ -- как только $s1 примет значение ИСТИНА, программа больше не будет делать проверку на строку /george/. $s2 ||= /judy/ работает подобным образом. Программа закончит свое выполнение как только обе переменные $s1 и $s2 получат значение ИСТИНА. Интересный момент заключается в использовании оператора побитовое И (&) вместо логического И (&&). Левый и правый аргументы оператора & всегда выполняются в отличие от &&. Этот код просто не будет работать, если использовать оператор && и файл содержит строку 'judy' перед строкой 'george'. Конечно, нельзя всегда заменять оператор && на &, но в данном случае это необходимо.

  • Проверка: если ли в файле все необходимые нам слова.

    die "usage: multi string1,string2,string3 [file1 file2 ...]\n"
                    unless @ARGV;
    
            my @match;
            for (split /,/,shift) {
                    my $regex = "\Q$_\E";
                    push @match, eval 'sub { $_[0] =~ /$regex/o }';
            }
            my $line;
            while (defined($line = <>)) {
                    my @left_to_match;
                    for (@match) {
                            push @left_to_match, $_ unless $_->($line);
                    }
                    exit 0 unless @left_to_match;
                    @match = @left_to_match;
            }
            die "not found\n";

    Это совершенно другой подход. Мы начинает с того, что создаем анонимные функции, каждая из которых возвращает ИСТИНА, когда ее аргумент совпадает с одним из искомых слов. Ссылки на функции хранятся в массиве @match. Затем, для каждой строки входного файла, мы запускаем по циклу все функции. Если функция не нашла совпадения (искомое слово остутствует) мы сохраняем ссылку на эту функцию в другом массиве @left_to_match - они будут работать над следующими строками исходного файла. Когда все функции сработают, в массиве @left_to_match ничего не останется и программа завершится. В противном случае будет выдано диагностическое сообщение.


                                                That's all, Folks!
                                                                Nick

P.s Мой сайт находится в состоянии не только разработки и обновления, но и в состоянии раскрутки, по-этому, если вас не затруднит, посоветуйте мой сайт друзьям.
Также, вероятно, что у всех вас есть сайты, по-этому предлагаю обменяться ссылками.
На сайте также открылся форум, заходите туда, задавайте вопросы, обсуждайте!
Если у вас есть какие-либо вопросы и предложения, то направляйте их на мой e-mail: nicky@nm.ru

Хороших скриптов!

Tenet Banner System

http://subscribe.ru/
E-mail: ask@subscribe.ru
Поиск

В избранное