Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Помогите разобраться с use и require


Автор: igorold 26.4.2006, 13:26
Есть скрипт, который необходимо поставить в нескольких местах, но в начале скрипта есть индивидуальные настройки.
Я решил их вынести в отдельный файл, чтобы при замене скрипта не править каждый раз эти переменные.
как лучше это сделать?
Код

my $ComplexID = 520;
my $ComplexName = 'центральный журнал событий'; 
.................................
my $AdminID = 24;

перенес эти настройки в файл Config.pm:
Код

packages Config;
#===================Application settings=====================
my $Name = 'центральный журнал событий'; #название базы
my $ID = 520
my $Admin = 24;
1;

в основном скрипте вставил строку:
Код

require "Config.pm";

а как теперь эти переменные из файла Config.pm присвоить переменным основного скрипта?
Код

require "Config.pm";
my $ComplexID = ????;
my $ComplexName = ???; 
.................................
my $AdminID = ???;

а если использовать USE, какие отличия будут? 

Автор: nitr 26.4.2006, 13:49
самое простое решение это обычный файл - типа config.pl и загружать его можно в начале через do

Добавлено @ 14:00 
и глянь тут ;)
http://forum.vingrad.ru/index.php?showtopic=92794&view=findpost&p=711411

Добавлено @ 14:01 
Как говориться ПОИСК фарева ;) 

Автор: igorold 26.4.2006, 14:22
ну хорошо, сделал так файл Config:
Код

package Config;

BEGIN
{
    use Exporter;
    @Config::ISA = qw( Exporter );
    @Config::EXPORT = qw( $c );
}
our $c=
{
    ComplexName => 'центральный журнал событий',
    AdminID     => 24,
};
1;

основной скрипт:
Код

use "Config.pm";
my $ComplexName = $c->{ComplexName};
my $AdminID     = $c->{AdminID};

выдается ошибка:
Код

syntax error at /var/www/ComplexDB/ComplexDB.pm line 15, near "use "Config.pm""

кстати, поиском искал, ничего КОНКРЕТНОГО не нашел ... 
ни USE, ни REQUIRE, ни DO не использовал ...  smile  smile  smile  

Автор: nitr 26.4.2006, 15:41
Цитата(nitr @  26.4.2006,  13:49 Найти цитируемый пост)
самое простое решение это обычный файл - типа config.pl и загружать его можно в начале через do


проверь синтаксис своего скрипта >perl -w имя_скрипта 

Автор: GoodBoy 26.4.2006, 16:33
вместо
Код
use "Config.pm";

пиши
Код
use Config;
 

Автор: igorold 27.4.2006, 06:37
тогда выдает ошибку:
Код

Global symbol "$c" requires explicit package name at /var/www/ComplexDB/ComplexDB.pm line 18.
Global symbol "$c" requires explicit package name at /var/www/ComplexDB/ComplexDB.pm line 19.


неужели ни у кого нет работающего примера .... 
киньте кусочек работающего кода .... КТО МОЖЕТ .....

плииииииииз  smile  smile  

Автор: nitr 27.4.2006, 09:55
ты понимаешь... smile))
может стоит тебе какие книжки прочесть..?
и про простой способ я тебе сказал... не усложняй себе жизнь... 

Автор: GoodBoy 27.4.2006, 10:02
вот, держи:

Код
package config;

use Exporter;
@ISA = qw(Exporter);
$VERSION = 1.00;
@EXPORT = qw($hostname $database $username $password %code);

use strict;

our $hostname = "localhost";       # IP адрес хоста с базой данных MySQL
our $database = "basename";        # Наименование базы данных
our $username = "root";            # Login пользователя базы данных
our $password = "password";        # Пароль пользователя

our %code = (
    1 => 'READY',
    2 => 'IN MAIL PROCESS',
    3 => 'MAILED NORMALLY',
    4 => 'END TIMEOUT',
    5 => 'FILE NOT FOUND',
    6 => 'CANCELLED'
);

1;



использование:

Код
#!/usr/bin/perl

use strict;
use DBI;
use CGI qw(:standard :html3);
use config;

our ($hostname, $database, $username, $password);

my $dbh = DBI->connect("DBI:mysql:database=$database;host=$hostname", $username, $password) or die "Database connection failed: ".DBI::errstr;
  

Автор: igorold 28.4.2006, 06:22
GoodBoy, большое спасибо, заработало ... надо было в основном скрипте прописать:
Код

our ( и перечислить переменные из config.pm )


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

а насчет 
может стоит тебе какие книжки прочесть..?
и про простой способ я тебе сказал... не усложняй себе жизнь... 


так я читал, ну не смог разобраться ... я и просил пример - даже если способ простой, ну дай пример, жалко что ли?
не все же такие опытные ...  smile   

Автор: nitr 28.4.2006, 09:28
igorold, всё тоже самое, тока модуль зачем создавать? smile Прочесть можно perldoc Config.
И загружать можно просто через do, т.к. тот же our используете ;) Я про это говорил... пример (имхо) был лишний.

Невсегда опытный = внимательный ;) 
Цитата
use "Config.pm";

я этого не заметил =)) 

Автор: korob2001 28.4.2006, 11:58
Цитата(igorold @  28.4.2006,  03:22 Найти цитируемый пост)
our ( и перечислить переменные из config.pm )

Да нет, перечислять их не обязательно. Вообще используй ещё и массив @EXPORT_OK, да бы не экспортировать то, что не нужно.
Код

package Config;

require Exporter;
push( @ISA, 'Exporter' );
@EXPORT = qw( $DBHOST $DBBASE $DBLOG $DBPASS $IMG_DIR $JS_DIR $CSS_DIR );
@EXPORT_OK = qw( $DBHOST $DBBASE $DBLOG $DBPASS $IMG_DIR $JS_DIR $CSS_DIR );

# Конфигурация базы данных
our $DBHOST = "localhost";
our $DBBASE = "database";
our $DBLOG  = "root";
our $DBPASS = "pass";

# Конфигурация основных каталогов
our $IMG_DIR = "/home/localhost/images";
our $JS_DIR   = "/home/localhost/js";
our $CSS_DIR = "/home/localhost/css";

1;

Если тебе нужно экспортировать все переменные, то пишешь просто:
Код

#!/usr/bin/perl
use lib ( путь/к/библиотеке );
use Config;
# Здесь тебе доступны все переменные из файла Config.pm

Но может возникнуть такая ситуация, когда тебе понадобятся просто пути к каталогам, а переменные конфигурации базы данных не понадобятся вообще. Тогда пишешь так:
Код

#!/usr/bin/perl
use lib ( путь/к/библиотеке );
use Config qw($IMG_DIR $JS_DIR $CSS_DIR );
# Здесь тебе доступны только те переменные из файла Config.pm, которые ты указал явно.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)