Отключение warnings в сценариях ключом в config-файле

02.01.2007г. // Рубрики: web, Perl
Обычное дело - когда создаешь набор скриптов для веб-сайта, используешь повсюду прагму use warnings. Приходит время сдавать работу заказчику, прагма становится лишней (ну, скорее всего) - ибо нефиг захламлять лог-файл бессмысленными предупреждениями. Вообщем-то, не бог весь какая проблема, но когда много файлов сценариев - неприятно. Доверить массовую чистку внешним скриптом перед сдачей работы я не рекомендовал бы.. спать спокойней будешь.
Решение нашлось простое и элегантное. Итак, есть куча скриптов test1.cgi, test2.cgi,... В начале каждого из них не задумываясь вставляем:
#! /usr/bin/perl
use strict;
use warnings;
use CGI;
my $script = new CGI;
use Service;
use lib $LIB;
В текущей директории вместе со скриптами храним сервисный файлик Service.pm примерно такого содержания:
package Service;

BEGIN {
    eval {
        require 'Configs.pl';
        unless ($Configs::debug) { $SIG{__WARN__} = sub {}; }

        $DSN = 'DBI:mysql:' . $Configs::dbname . ':' . $Configs::dbhost;
        $LOGIN = $Configs::login;
        $PASSWD = $Configs::passwd;
        $LIB = $Configs::lib;
    }; $CFG_NOT_FOUND = ($@) ? 1 : 0;
    use Exporter;
    @ISA = qw(Exporter SelfLoader);
    @EXPORT = qw($DSN $LOGIN $PASSWD $CFG_NOT_FOUND);
}
..................
1;
Ну, и наконец, там же храним файл с конфигурацией наших скриптов - Configs.pl. В частности, в нем указываем ключ - выводить предупреждающую информацию или нет.
package Configs;
BEGIN {
    # Настроечные параметры системы

    # при отладке этот параметр желательно
    # оставить не нулевым
    $debug = 0;

    # ip-адрес или имя компьютера, на котором
    # установлен MySQL
    $dbhost = '127.0.0.1';

    # имя базы данных
    $dbname = '......';
    $login = 'root';
    $passwd = '.......';

    # дополнительный путь к Perl-модулям на хостинге
    $lib = '.'; #или '/home/vasya_pupkin/lib';
}
1;
Вот, собственно, и всё. :) Если нужно включить вывод варнингов - ставим $debug=1, если выключить - 0.
В конце маленькое замечание - убедитесь, что ваш Configs.pl нельзя утащить браузером - там могут быть пароли. Впрочем, по-умолчанию сконфигурированный Апач не даст этого сделать.

Рубрики