the following is my script that i am working on- it fails to do
quite
the right thing.. qouting from one of the comments below::

"#skip_lines() is supposed to "skip" some lines of output.

#The problem is, that it DOESN'T even though the debug print statement
# "print "trash is $trash \n"; #debug " shows that it works-

#after leaving the for loop, it seems that CMD re-winds itself...
# i am flummuxed!!"




#!/usr/bin/perl
#
#
# Screen parser for Service Information System utilities
# on RAXP
# History::
#       5 feb 2004  skeleton and parse routines built (w/ test values.) wmw

#---------

use strict;
use diagnostics;

#----------
my $command = "/home/willy/Documents/conditional.testbed.exp";
my $pattern = "inittab";
my $skip;
   $skip->[0] = 2;
   $skip->[1] = 2;
my $table;
   $table->{"PART"} = "INVENTORY";
#----------

# $pattern is only a string right now because i am assuming
# that the screens will be consistant with each call. $skip should produce
# enough flexibility for reuse.




open (CMD , "$command|") or die "Could not execute $command : $!";

parse_and_extract($pattern,$skip,$table);

close CMD;


#the following routine takes each line of the input (from a different
#program).  When the pattern is matched, it calls get_inventory().


sub parse_and_extract {

        my $pattern     = shift; #what we look for.

        my $skips       = shift; #array ref. each value is # of lines to
skip
                                   # over.

        my $table       = shift; #values are stored here. (hash reference)

        while (<CMD>) {
                get_inventory ($table,$skips) if ($_=~m/$pattern/);
                print "parse_and_extract\n\r"; #debug
                print "$_\n\r"; #debug
        }
}

#the following routine assigns a key/value pair to a hash reference ($table)
#skip_lines() is supposed to "skip" some lines of output.

#The problem is, that it DOESN'T even though the debug print statement
# "print "trash is $trash \n"; #debug " shows that it works-

#after leaving the for loop, it seems that CMD re-winds itself...
# i am flummuxed!!

sub get_inventory {
        my $table = shift;
        my $skip = shift;


        #$skip is an array reference for the case that several
        #different screens will have to be parsed in the future-
        #in which case, a flag will have to be added to determine
        #which value in the array reference will be used.
                # (perhaps $skip should be a hash of arrays?)

        #first we skip the lines from the pattern match up to
        #the line with the value we want.

        skip_lines ($skip->[0]);

        my $partnumber = $_;#check syntax-> is $_ instead?

        #skip lines to the next value...

        skip_lines ($skip->[1]);

        my $inventory = $_;#check syntax-> is $_ instead?


        $table->{$partnumber}=$inventory;
        #print "keys:: "; #debug
        #print keys(%$table); print "keys to the table\n"; #debug
        #print " get_inventory() $_\n"; #debug

}


sub skip_lines {
        my $lines = shift; #number of lines in file to skip over
        
        print "in skip_lines() $_ before skip\n"; #debug
        
        #<CMD> for 1..$lines; #not functioning...

        for (0..$lines){
                my $trash = <CMD>;
                print "trash is $trash \n"; #debug
        }
        print "in skip_lines() $_ after skip\n"; #debug

}



#---------------------------------------


the following is the test expect script that i am using- as far
as i can tell, it's working fine :/  (there's extra stuff in there
since i was trying to learn how to use "if" statements earlier...)




#!/usr/bin/expect -f

#set ps $argv 0
set ps "password"

spawn telnet "localhost"
expect "ogin: "
send "willy\n"
expect "word:"
send "$ps\n"

expect "terminal:*"  

send "ls\n"


#------------------

set file "Desktop.ini"

set counter 1
while {$counter < 5} {
        send "echo $counter \n ls $file\n"

        expect "No such file" {set counter [expr $counter + 1]}
        expect "$file" {set counter 200}

        sleep 2
}


send "ls\n\n"

sleep 2;

expect "terminal" {
if {$counter < 200} {
        global subject
        set subject "failed to produce report"
        #expect "terminal:*"
        send "w\n"
 }

 if {$counter > 100} {
        #expect "terminal:*"
        send "date\n"
 }
}

expect "terminal"
send "cd /etc\n"
expect "terminal"
send "ls\n"

#------------------------------
interact





thanks,
   willy


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to