关于文件路径的问题

关于文件路径的问题

现在有个关于文件路径的问题,请各位大大们帮忙:



现在我的一个程序名字是 project.pl 它需要调用一个函数库文件 functions.pl 他们放在 c:\project 里面

在主程序里是这样调用的:

require "./function.pl"


如果在这个目录里运行没有问题



可是如果在别的路经下运行,就会出问题


比如  d:\pro1\> c:\project\function.pl

会说 ./funtion.pl 找不到


请问如何解决呢。。


望各位大大帮忙

谢谢
[root@td17 z]# cat function.pl
sub test {
    print "in function.pl\n";
}

1;
[root@td17 z]# cat caller.pl
#!/usr/bin/perl
use FindBin;
use lib "$FindBin::Bin";
require "function.pl";

&test();
[root@td17 z]# cd ..
[root@td17 tmp]# perl z/caller.pl
in function.pl


以前读脚本的时候经常看到这个,今天才试试
BEGIN
{
         #得到你当前的目录$org_dir.        d:\pro1\
         #进到你的项目目录再require.       cd c:\project\; require function.pl
         #退到$org_dir.                          cd d:\pro1\
}
There are some issues when use FindBin module.

FYI:
http://perldoc.perl.org/FindBin.html
谢谢各位的帮助


关键是因为存放路径不一定在一个固定的位置

又不能让用户自己修改程序


能不能有办法自动获得主程序的目录路径呢


。。。

因为这两个程序一定保存在一个目录下的

这点可以保证


可以做到吗


QUOTE:
原帖由 hfmouse 于 2007-10-11 19:24 发表
谢谢各位的帮助


关键是因为存放路径不一定在一个固定的位置

又不能让用户自己修改程序


能不能有办法自动获得主程序的目录路径呢


。。。

因为这两个程序一定保存在一个目录下的

这点可以 ...

3楼的办法啊,写在BEGIN语句里头。


QUOTE:
原帖由 systemalgorithm 于 2007-10-11 20:59 发表


3楼的办法啊,写在BEGIN语句里头。

e...

对不起,可是我不知道怎么得到目录路径啊。。。


比如 当前目录可以是 d:\pro1 d:\pro2 e:\pro1 等等

存放文件目录也可以是任意的




原谅我是新手

望指点得再明白些。。谢谢


QUOTE:
原帖由 systemalgorithm 于 2007-10-11 09:27 发表
There are some issues when use FindBin module.

FYI:
http://perldoc.perl.org/FindBin.html

我看了这个模块,请问那个路径被存在什么变量中了,我想输出这个路径的话有什么办法?
用 FindBin::Bin


已经解决,谢谢
帮你写了个:

a.pl
#!/usr/bin/perl -w

use strict;
use File::Basename;
BEGIN
{
        my $cpath = dirname($0);
        my $file = $cpath."/b.pl";
        require $file;
}

print hello();


b.pl
sub hello
{
        return "hello, I'm b\n";
}

1