Forum Webscript.Ru

Программирование => Perl => Тема начата: DartSidius от 14 Ноября 2006, 12:48:53

Название: Вызов подпрограммы из модуля
Отправлено: DartSidius от 14 Ноября 2006, 12:48:53
короче такая тема...


есть модуль Module.pm

скрипт test.pl

в нём

use Module;

sub test1{
   Module->func("aaa","bbb","ccc");
}


sub test2 {
     print "$_[0],$_[1],$_[2}";
}

текст модуля:

package Module;

sub func() {
     main->test2($_[0]);
}


короче говоря из тест 1 вызываю функцию из модуля, которая в свою очередь должна передать в test2 то, что её дала test1

почему то ничего не передаётся :(
Название: Вызов подпрограммы из модуля
Отправлено: NeoNox от 14 Ноября 2006, 13:47:48
А test1 кто будет вызывать, Пушкин?
Зря ты не следуешь совету читать перед тем как писать.
Название: Вызов подпрограммы из модуля
Отправлено: DartSidius от 14 Ноября 2006, 14:25:49
Шо за глупости....скрипт примерный...конечно ж я вызываю test1....

если тебе так нравится, то &test1; - вызвал :)

но результата нет на выходе
Название: Вызов подпрограммы из модуля
Отправлено: NeoNox от 14 Ноября 2006, 14:33:27
# cat ./*
package Module;

sub func() {
        main->test2($_[0]);
}

1;#!/usr/bin/perl
use strict;
use warnings;

use Module;

sub test1{
        Module->func("aaa","bbb","ccc");
}


sub test2 {
        print $_[1];
}

test1;

# ./test.pl
Module
Название: Вызов подпрограммы из модуля
Отправлено: DartSidius от 14 Ноября 2006, 14:42:58
вроде разобрался...только обнаружил такой прикол...допустим если мы вызвали Module->func("aaa","bbb","ccc"); , то нулевое $_[0] будет не aaa а Module...почему так?
Название: Вызов подпрограммы из модуля
Отправлено: NeoNox от 14 Ноября 2006, 15:07:42
Это не "прикол" а "фича".

При вызове Module->func("aaa") $_[0] содержит имя пакета а $_[1] "ааа"
При вызове Module::func("aaa") $_[0] содержит "ааа"

Вообще это гадание на кофейной гуще, настоятельный совет - читать документацию перед тем как писать, иначе будет чушь, которую ты сейчас написал.
Название: Вызов подпрограммы из модуля
Отправлено: DartSidius от 14 Ноября 2006, 15:32:13
кстати у меня когда вызываешь функцию так Module::func("aaa"), выдаётся  Too many arguments for Module::func at index.cgi line 12, near ");"

а если так, то всё нормуль
&Module::func("aaa")