脚本中当子过程错误退出后,主程序怎么也退出了?

脚本中当子过程错误退出后,主程序怎么也退出了?

我写了这样一个perl程序,大多数都是拷的了。

#!/usr/bin/perl -w
use strict;
use Net::SSH::Expect;
use IO::File;

#manually add private key
#system ". ~/.pssh";


my $iplistfile="batchssh.list";

sub  oneSsh {
        # 1) run the constructor
        my $ssh1 = Net::SSH::Expect->new (
            host => $_[0],
            user => 'zz',
            raw_pty => 1
        );

        # 2) now start the ssh process
        $ssh1->run_ssh() or die "SSH process couldn't start: $!";


        # disable terminal translations and echo on the SSH server
        # executing on the server the stty command:
        $ssh1->exec("stty raw -echo");


        my $who = $ssh1->exec("whoami");
        print ("$who\n");


        # Now let's run an interactive command, like passwd.
        # This is done combining send() and waitfor() methods together:
        $ssh1->send("su -");
        $ssh1->waitfor('Password:\s*', 3) or die " 'password' not found after 3 second";
        $ssh1->send("aaaa");
        $ssh1->waitfor('#\s*', 3) or die " 'password:' not correct";
        my $catshow = $ssh1->exec("cat /etc/passwd");
        print ("$catshow\n");


        # closes the ssh connection
        $ssh1->close();
}


#oneSsh($hostip);

    my $fh1 = new IO::File "$iplistfile", "r";
    while ( defined(my $line=$fh1->getline) ) {
         if ($line!~/^$|^#/) {
         my $lineip = (split (/\s+/ ,$line))[0] ;
         print "$lineip\n";
         oneSsh($lineip);
         }
    }

当我在主程序中去调用oneSsh这个子过程的时候,正常情况下能够执行完毕。

问题是:
有些时候,$iplistfile这个中的有些设备down掉了,连不通。
这时当执行到这台有问题的机器后,主程序就推出了,后面ip列表中的机器没有继续执行。
请问有什么办法让子过程报错退出后,主程序还继续执行?
调用了die, 改成warn
楼上正解,不过为了脚本更快,我觉得是不是你最好在连接之前先用ping模块测试一下。能通的再连。
Write a small subroutine to log some messages -- good or bad instead of die or print to terminal It is an elegant way to do the work and very helpful for debugging.