perl中先有鸡,还是先有蛋的问题,呵呵



QUOTE:
原帖由 cobrawgl 于 2008-8-26 09:43 发表
LOOP:
eval {require Net::Telnet };
if ($@) {
    install ...
    goto LOOP;
}

这样的思路成么? 没测试啊,也可能用不着 LOOP?

那应该用什么建立这个循环


QUOTE:
原帖由 cobrawgl 于 2008-8-26 10:01 发表
你那样当然不成了,你按照我的方法试试?

上面的代码就是一个意思啊,无非就是想判断有没有,没有的话先安装。
其实我自己写的也是这样的,甚至我没判断,而是每次都安装一次。但没安装的机器连编译都通过不了
我把你的代码改了一下,你看看那里的问题吧

[Copy to clipboard] [ - ]
CODE:
my $NET_TELNET   = "Net-Telnet-3.03.tar.gz";
my $NET_TELNET1  = "Net-Telnet-3.03.tar";
my $NET_TELNET2  = "Net-Telnet-3.03";
my $Current_path = `pwd`;

LOOP:
eval {require Net::Telnet };
if ($@) {
        &install_telnet;
    goto LOOP;
}
use Net::Telnet;

sub install_telnet {
        print "Continue to install Perl/DBI Module....... \n";
        if ( !-e $NET_TELNET1 ) {
                `gunzip $NET_TELNET `;
        }
        `tar xvf $NET_TELNET1 `;
        chdir "$Current_path/$NET_TELNET2"
          or die "can't change dir to $Current_path/$NET_TELNET2 \n";
`/usr/local/bin/perl $Current_path/$NET_TELNET2/Makefile.PL`;
`make `;

        #        my_system("make test");
`make install`;
        print "install Perl/Net::Telnet Module successful \n";

        #                chdir "$Current_path"
        #          or die "can't change dir to $Current_path \n";
}

提示同样的错误“Can't locate Net/Telnet.pm in @INC”
很形象。
lz 啊,我怎么跟你说啊,你还没有装上 Net::Telnet  你就不要 use 它啊,你一 use 就会编译时报错啊

Can't locate Net/Telnet.pm in @INC

所以我把它放在 eval 里,用个 loop 在安装完了再重新 eval 一下,就等于 use 了。。。。。
当然报错了  use Net::Telnet;
  这句是在编译的时候执行的。没有,就报错
呵呵
Well,Thank you so much.
It's ok now .
cheers