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


Автор: vadiml 18.11.2007, 15:09
У меня в 1 модуле есть 2 пакета Size и SizeF (для int и float чисел соответственно)

подключаю я этот модуль как
use Size;

но надо чтоб этот модуль подключался и как
use SizeF;

если сделать симлинк, то оно так и работает, по проблема в том, что надо чтоб это потом и на винде работало, где симлинков нет. Копию файла с таким же названием делать не желательно. А вот изнутри вызвать другой что-то не получилось (пробовал 
use base и our @ISA=(Size) )


Автор: Vaneska 26.11.2007, 01:24
По хорошему надо бы разделить пакета по разным файлам.

А вообще разъясняю ситуацию.
В файле Size.pm два пакета по Вашему получается.

Когда пишем
Код

use Size;

в текущей программе будут доступны одновременно подпрограммы пакетов Size и SizeF
такими способами:
Код

&Size::some_sub1();
&SizeF::some_sub2();

# или, если в пакетах был сделан импорт подпрограмм
some_sub1();
some_sub2();

поэтому совершенно не нужно добавлять use SizeF
В операторе use первый параметр обозначает либо имя пакета, которое преобразуется в последующем в путь к файлу, или сам файл с путем к нему
например
Код

use Math::Size; # = use "Math/Size.pm"
use "Math/Size.pm";

Автор: vadiml 26.11.2007, 15:01
Мне надо чтоб пакет SizeF был доступен как по вызову use Size, так и по вызову use SizeF, т.е. мне нужна полная аналогия вызова С модуля, интерфейс к которому у меня в Size прописан:
есть Size.h & Size.cpp с описанием и телом модуля
есть SizeF.h с  *одной* строкой: #include <Size.h>
имитацию этого я и хочу получить.

Автор: Vaneska 26.11.2007, 15:58
тогда вот так можно:

Код

# файл Size.pm
package Size;

require Exporter;
our @ISA = ("Exporter");
our @EXPORT = qw(
        some_sub
);

sub some_sub
{
        print "some_sub\n";
}

package SizeF;

require Exporter;
our @ISA = ("Exporter");
our @EXPORT = qw(
        some_sub2
);

sub some_sub2
{
        print "some_sub2\n";
}

1;

# Файл SizeF.pm
use Size;
1;

#Файл test.pl
use SizeF.pm

some_sub();





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