Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов без скобок функции, опр. в другом файле. 
:(
    Опции темы
chebog
Дата 16.11.2009, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Ребята, никак не могу разобраться с областью видимости.

Дело стоит так.
Есть 2 файла - string.pl и lang.pl

string.pl:
Код
#!/usr/bin/perl

require 'lang.pl';

our $DEBUG = 0;

# my string functions

our sub println {
    print shift()."\n";
}

sub empty {
    return 1 if ($_[0] eq '') || ($_[0] == 0);
        return 0;
}

sub err {
    return lang('Internal error!') if empty $DEBUG;
    return shift;
}


println err lang('Booooo!');


lang.pl
Код
#!/usr/bin/perl

our %lang;
$lang{'Internal error!'} = 'Internal error!';

our sub lang {
    return $_[0];
}

1;


Так вот, вышенаписанный код работает хорошо. Однако если опускать скобки при функции lang() - интерпретатор жалуется, что функция еще не определена.
Подскажите, что я делаю неправильно? Есть ведь у нас perl-программисты, да?
PM MAIL   Вверх
arto
Дата 16.11.2009, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



1. все
2. есть
PM MAIL ICQ   Вверх
chebog
Дата 16.11.2009, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



arto, вы козел.
И форум, походу, бесполезный - судя по комментам.
Всего хорошего.
PM MAIL   Вверх
arto
Дата 16.11.2009, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



не плачте.
PM MAIL ICQ   Вверх
chebog
Дата 16.11.2009, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



На случай, если здесь все же есть разумные люди, выкладываю решение поставленной задачи...

Чтобы при вынесении функций в файл не ставить скобки и разыменовывающий функции префикс '&' можно вынести функции в модуль и использовать стандартный модуль Exporter.
Пример:

test.pl
Код
#!/usr/bin/perl

use strict;
use Include;

hello;
hello2;


Include.pm
Код
#!/usr/bin/perl

package Include;

BEGIN {
    use Exporter ();
    @ISA = "Exporter";
    @EXPORT = ("&hello", "&hello2");
}

sub hello {
    print "Hello, world!\n";
}

sub hello2 {
    print "Hello, world #2 !!!\n";
}

return 1;


Результат работы:
Код
chebog@notebook:~/Рабочий стол/perl/test$ ./test.pl
Hello, world!
Hello, world #2 !!!
chebog@notebook:~/Рабочий стол/perl/test$



За сим оставляю форумчан общаться с подобными arto. С уважением, CheboG.
PM MAIL   Вверх
arto
Дата 16.11.2009, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



как легко можно заставить человека прочитать документацию!
PM MAIL ICQ   Вверх
sir_nuf_nuf
Дата 17.11.2009, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



Цитата(chebog @  16.11.2009,  21:39 Найти цитируемый пост)
arto, вы козел.

1) ругаться плохо. Ибо perl программисты претендуют на звание самых счастливых и умиротворенных.
А тех кто ругаются пиннают сапогами =)

arto - у нас капитан очевидность  smile 


Код

BEGIN {
    use Exporter ();
    @ISA = "Exporter";
    @EXPORT = ("&hello", "&hello2");
}


можно писать
Код

use Exporter qw(import);
our @EXPORT = ("&hello", "&hello2");



--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
shamber
Дата 17.11.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



arto, вряд ли чтение документации. Скорее всего copy-paste. smile
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4663 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.