Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Значение системной переменной


Автор: skalex 6.9.2004, 09:05
Подскажите пожалуйста, как в Perl узнать значение системной переменной (например, переменной $HOSTNAME в *nix системе). Заранее благодарен за ответ.

Автор: GoodBoy 6.9.2004, 10:10
Все системное окружение, которое передаетcя в перл-скрипт содержится в хэше %ENV.

Автор: skalex 6.9.2004, 10:25
Все было бы хорошо, если бы значения нужных переменных действительно в нем содержались... bored.gif

Автор: GoodBoy 6.9.2004, 10:27
А $ENV{HTTP_HOST} - это не то, что тебе нужно?

Автор: skalex 6.9.2004, 13:49
да, часть переменных окружения содержится в %ENV. но, как оказалось, что есть еще часть переменных, которых нет в этом хеше. Например, такой переменной является $HOSTNAME. ее значение я могу узнать подав команду с терминала:
Код
echo $HOSTNAME

Автор: GoodBoy 6.9.2004, 14:17
Ещё раз спрашиваю тебя:
Цитата(GoodBoy @ 6.9.2004, 11:27)
А $ENV{HTTP_HOST} - это не то, что тебе нужно?


Автор: skalex 6.9.2004, 15:20
нет, это не то, что мне нужно!

Автор: GoodBoy 6.9.2004, 15:31
Ну могу предложить тебе сделать так:
1. Делаешь файл test.pl и в нем пишешь:
Код
#!/bin/sh
echo $HOSTNAME

2. Ставишь на него 755
3. в коде скрипта, где тебе нужно значение этой переменной делаешь:
Код
my $qwe =  `./test.pl`;
print $qwe;

Обрати внимание, что вызов ./test.pl взят в обратные кавычки ` (это там, где буква Ё)

:-)))))))))))))))))))

Автор: ElectricalStorm 6.9.2004, 15:34
Код

print [gethostbyname('')]->[0]

Автор: GoodBoy 6.9.2004, 15:42
ElectricalStorm
У меня - пусто...

Автор: skalex 6.9.2004, 15:53
GoodBoy
Не очень смешно... hmmm.gif

Автор: GoodBoy 6.9.2004, 15:56
Mace
Да я вообще-то серьезно говорил!!! :-)))))
То, что посоветовал ElectricalStorm у меня почему-то не сработало... И если тебе действительно нужно получить системную переменную, которой нет в %ENV, то, вероятно, придется воспользоваться моим способом...

Автор: ElectricalStorm 6.9.2004, 16:03
GoodBoy у тебя наверно сети нету ... smile.gif

Mace
Вам что нужно получить IP ? имя хоста ???

Автор: skalex 6.9.2004, 16:05
Хм...
То, что посоветовал ElectricalStorm, у меня тоже не работает...
Неужели нет другого способа ???
Добавлено @ 16:14
объясняю ситуацию несколько подробнее:
perl-скрипт никак не связан с web-сервером! и будет запускаться с помощью crontab.
однако значения некоторых переменных, зависят от места запуска (сервера на котором распологается скрипт).
таких серверов несколько.
хочется иметь один универсальный скрипт, вместо нескольких с разными переменными.

Автор: ElectricalStorm 6.9.2004, 16:14
так чего же вы хотите что бы делал ???
какие значения (!) переменных вам нужны ?

Автор: skalex 6.9.2004, 16:21
Цитата
какие значения (!) переменных вам нужны ?

не понял вот этого вопроса!

Автор: GoodBoy 6.9.2004, 16:26
ElectricalStorm
Уж да... Сети нету... Скажешь тоже... :-))))))))

Автор: korob2001 6.9.2004, 16:59
Содержимое хэша %ENV зависит от используемого сервера. Если кому интересно, даваете установим сервер Apache и Xitami. После запустим такую вот прогу сначала на одном сервере, а затем на другом и сравним результаты.
Код

#!/usr/bin/perl -w
use strict;
print "Content-type: text/html\n\n";
while ( my( $key, $val ) = each( %ENV ) ) {
          print "$key => $val<br>";
}

Лично у меня, если запустить данный код через Xitami, то хэш %ENV содержит намного больше значений, чем через Apache.

Удачи.

Автор: ElectricalStorm 6.9.2004, 17:15
моя попытка номер 5 smile.gif
Код

use Socket;
use Sys::Hostname;

my $host = hostname();
my $addr = inet_ntoa(scalar gethostbyname($host || 'localhost'));
print $addr;



ну давайте у кого что эта программка покажет ? smile.gif

Автор: skalex 7.9.2004, 08:18
smile.gif
У меня выдает IP сервера.
Большое спасибо за информацию!!!

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