in reply to Re: Using multiple input files #2
in thread Using multiple input files #2

I appreciate the advise. It now moves nicely thru the first file. However, it only reads the first line of the second file, and leaves subsequent fields blank, as shown below. Also, to help out, I added the content of both input files as well.
print HDLCGET "\#\!\/usr\/local\/bin\/expect\n"; print HDLCGET "set timeout -1\n"; open(MYINPUTFILE, "hdlc2") or die "UNABLE TO OPEN FILE hdlc2: $!"; open(MYINPUTFILE1, "hdlc3") or die "UNABLE TO OPEN FILE hdlc3: $!"; while(<MYINPUTFILE>) { my($line) = $_; chomp($line); my($line1) = <MYINPUTFILE1>; chomp($line1); print HDLCGET "spawn \ ssh $line\n"; print HDLCGET "expect \"assword: \"\n"; print HDLCGET "send \"$tacacspw\\r\"\n"; print HDLCGET "expect \"#\"\n"; print HDLCGET "send \"terminal length 0\\r\"\n"; print HDLCGET "expect \"#\"\n"; print HDLCGET "send \"show xconnect all | inc $line1\\r\"\nexpect +\"#\"\n"; print HDLCGET "send \"exit\\r\"\n"; print HDLCGET "interact\n"; } close(MYINPUTFILE); close(MYINPUTFILE1);
now gives me the following output:
#!/usr/local/bin/expect set timeout -1 spawn ssh 10.247.17.141 expect "assword: " send "Kalewi13\r" expect "#" send "terminal length 0\r" expect "#" send "show xconnect all | inc 99999999\r" expect "#" send "exit\r" interact spawn ssh 10.247.17.1 expect "assword: " send "Kalewi13\r" expect "#" send "terminal length 0\r" expect "#" send "show xconnect all | inc \r" <-- MISSING LINE 2 INPUT FROM hdlc +3 expect "#" send "exit\r" interact
here is the content of the two input files. I kept it to three lines for now.

hdlc2
10.247.17.141 10.247.17.1 10.247.17.69
hdlc3
99999999 616698950 615498584
Thanks again for the help.

Replies are listed 'Best First'.
Re^3: Using multiple input files #2
by kennethk (Abbot) on Mar 31, 2009 at 17:46 UTC

    Found the issue, which was my fault. By surrounding $line1 with parentheses in my($line1) = <MYINPUTFILE1>;, we moved to list-context. This means the entire file was being slurped, and the first element of the resulting list (i.e. line 1) was stored to the variable. On the subsequent iterations, the result was undef because the entire file had been read already. Working code:

    use warnings; use strict; my $tacacspw = 'Kalewi13'; print "\#\!\/usr\/local\/bin\/expect\n"; print "set timeout -1\n"; open(MYINPUTFILE, "<", "hdlc2") or die "UNABLE TO OPEN FILE hdlc2: $!" +; open(MYINPUTFILE1, "<", "hdlc3") or die "UNABLE TO OPEN FILE hdlc3: $! +"; while(<MYINPUTFILE>) { my($line) = $_; chomp($line); my $line1 = <MYINPUTFILE1>; chomp($line1); print "spawn \ ssh $line\n"; print "expect \"assword: \"\n"; print "send \"$tacacspw\\r\"\n"; print "expect \"#\"\n"; print "send \"terminal length 0\\r\"\n"; print "expect \"#\"\n"; print "send \"show xconnect all | inc $line1\\r\"\nexpect \"#\"\n" +; print "send \"exit\\r\"\n"; print "interact\n"; } close(MYINPUTFILE); close(MYINPUTFILE1);
      Duh, I should've caught that :-) I appreciate the help, works like a charm now.