[TriLUG] YAPQ (yet another Perl question)

Greg Brown gwbrown1 at gmail.com
Fri Mar 20 14:26:13 EDT 2009


This should be very simple.  Very.  Extraordinarily.   But I'm missing
something because it's just not working.

I've got a Perl script that grabs info from expect.pm.  I get a variable
back called $before.  It contains the data I want.  I copy $before to $read
then split $read on the newline.  For test purposes I print each of the
lines of (now) @read and this is where things get screwy.

Instead of splitting at the newline, which I clearly told it to do, it seems
to be splitting on whitespace.  Running the output threw od shows nothing
hidden that would be tripping the script.

details:

This is what comes back from the expect and is written to $before:

I SNTP Poll Seconds:      300
I HTTPS port:             443
I SSH port:               22
I Syslog:                 off
  Compression:            on (Enhanced Mode)
I Packing:                off
I Acceleration:           off
I Adaptive Response:      on

This is now my script is processing it:

SNTP
Poll
Seconds:
300
I
HTTPS
port:
443
I
SSH
port:
22
I
Syslog:
off
Compression:
on
(Enhanced
Mode)

yet this is how it looks in OD:

0037440   :                           3   0   0  \r  \n   I       H   T
0037460   T   P   S       p   o   r   t   :
0037500                           4   4   3  \r  \n   I       S   S   H
0037520       p   o   r   t   :
0037540                       2   2  \r  \n   I       S   y   s   l   o
0037560   g   :
0037600               o   f   f  \r  \n           C   o   m   p   r   e
0037620   s   s   i   o   n   :
0037640           o   n       (   E   n   h   a   n   c   e   d       M
0037660   o   d   e   )  \r  \n   I       P   a   c   k   i   n   g   :
0037700
0037720   o   f   f  \r  \n   I       A   c   c   e   l   e   r   a   t
0037740   i   o   n   :                                               o
0037760   f   f  \r  \n   I       A   d   a   p   t   i   v   e       R
0040000   e   s   p   o   n   s   e   :                           o   n
0040020  \r  \n  \r  \n   /   O   l   d   S   i   t   e   D   e   f   a
0040040   u   l   t   /   C   o   r   k   /   B   a   c   k   u   p   /
0040060   1   3   5   -   1   0   0   0   4   4   7   4  \n


I'm specifically interested in the Compression: line but I want the entire
line.

                        # now expect back a bunch of stuff along with the
"#" prompt
                        ( $which, $why, $match, $before, $after ) =
$ssh->expect(90,'#');

                        # this is a perl thing, copy $before to a new
variable $read
                        $read=$before;
                        if ($read =~ m/Compression:/) {

                                # print DEBUG "$hostname compression\n";
                                # print DEBUG1 "$hostname $before\n";

                        # step through each line
                        @read=split(/[\n\r\l]+/,$read);

                        # start a foreach loop
                        foreach $readLine (<@read>) {

                                print DEBUG "$readLine\n";

                        } # end the foreach loop



More information about the TriLUG mailing list