你们怎么调用另外一个文件的函数的。

你们怎么调用另外一个文件的函数的。

我在另外一个文件里写了个函数准备调用的时候出这个错~

Can't call method "reduce" without a package or object reference at D:\ebook\Perl\work\test.pl line 4.

我用不用require都是这个错~。。

还顺便问下其他问题

use vars qw($a $b)是什么意思

第一个问题的原因是因为你调用的不简简单单是函数,而是一个方法(注意看错误信息提示),你调用它应该用类或对象,或者把类或对象作为参数传递给它。
第二个问题就是声明$a,$b两个变量,没什么特别的。
先生成对象再调用方法
你没调用到的问题是,你的另一个文件中函数定义和你这个程序中调用的方式不匹配。
有函数的文件,放到程序根目录的class文件夹中


[Copy to clipboard] [ - ]
CODE:
package CommonFunction;


根目录中的程序调用代码:


[Copy to clipboard] [ - ]
CODE:
use class::CommonFunction;



不懂,干脆贴出来

一个文件是test.pl

内容是

use class::test;

my $sum=reduce {$_[0]+$_[1]} 1..3;


print $sum;

另外一个是test.pm  放在./class/目录下

package class::test;


sub reduce (&@) {
        #print scalar @_;
        my $sub = shift;
        
        while(@_>1) {
                unshift @_,$sub->(shift,shift);
        }
        $_[0];
}
1;


test.pl怎么运行不了,出那个错误
Can't call method "reduce" without a package or object reference at D:\ebook\Perl\work\test.pl line 3.
呵呵 我不懂 啊















琴帝


QUOTE:
原帖由 hdc1112 于 2008-8-7 11:00 发表
不懂,干脆贴出来

一个文件是test.pl

内容是

use class::test;

my $sum=reduce {$_[0]+$_[1]} 1..3;

...

这句应该为my $sum=reduce sub {$_[0]+$_[1]} 1..3;
我只是随便看了看,没帮你测试
把 package class::test; 一行去掉,
把 use 改成 require。
要在reduce 前加class::test::
因为你的module里面没有定义用@EXPORT
这个方法很好,没想到require 作用可以这样,加深了认识。