Gary, That was my reasons for my question originally, I've already Modified the new version of the script to for loop the routine So it could go thru the commands when the OS has been determined. I really do appreciate that feedback.
My original reasoning for using Text::CSV cause it Could parse the @lines statement into fields cause I Was getting other characters that needed to be separated after the telnet call. I probably could have used the chomp routine to deal with that instead. Phillip -----Original Message----- From: Gary Stainburn [mailto:[EMAIL PROTECTED] Sent: Tuesday, October 28, 2003 3:04 PM To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Subject: Re: Issue On Tuesday 28 Oct 2003 5:42 pm, [EMAIL PROTECTED] wrote: > Gary, > > I think your closer to what I was thinking of. > It makes more sense. Currently, This is what I > Have so far not with your suggestions as of yet. > [snip] > > # > # Get the host name of system > # > my @lines = $telnet->cmd('uname -n'); > my $csv = Text::CSV->new; > if ( $csv->parse(@lines) ){ > my @field = $csv->fields; > for $host (@field){ > print OUT_FH $host,",", $ipaddr; > print "Found Host...\n"; > } > } Hi Philip, I'm not sure why you're using Text::CSV in this context, but other than that, wouldn't the above be better placed in a subroutine, e.g. sub get_response( my @lines = $telnet->cmd($_[0]); my $csv = Text::CSV->new; if ( $csv->parse(@lines) ){ return $csv->fields; } return undef; } then you could simply do (using my answer from before) my $OS=(&get_response('uname -n'))[0]; die "OS not found" unless ($OS && defined $whichos{$OS}); my $hostname=(&get_response($commands{$OS}{'hostname'}))[0]; print OUTPUT_FH ",$hostname"; etc...... If course, if you made the subroutine only return a single value, it would be cleaner to call. [snip] > > So far this is only testing the solaris commands on the network > I have access to. I appreciate any other comments you may have. > > > -----Original Message----- > From: Gary Stainburn [mailto:[EMAIL PROTECTED] > Sent: Tuesday, October 28, 2003 8:36 AM > To: [EMAIL PROTECTED]; [EMAIL PROTECTED] > Subject: Re: Issue > y > > On Monday 27 Oct 2003 7:32 pm, [EMAIL PROTECTED] wrote: > > Hi, > > > > I'm trying to accomplish some task using perl. So let > > me describe what I have. > > > > I have several systems of the following: > > > > Unix: > > Sun - Solaris > > HP - HPUX > > > > Windows: > > Dell - Windows 2k > > > > Each of these OS's have specific commands that are specific > > not only to the OS but to the hardware as well. Wouldn't it be > > better if I created a header file that contains these commands > > and assigned them to a common variable? > > > > Example: > > $memory = 'prtconf | grep Memory | awk '{print $3}' > > [snip] > > Hi Philip, > > I'd try something like (asuming $detail is part of the header returned from > the Net::telnet connect) > > my %whichos=('Solarix'=>'sol','Aix'=>'aix','microsoft'=>'W2K'); > my %commands=('sol'=>{'memory'=>'prtconf | grep Memory | awk '{print $3}', > 'diskfree'=>'..........'} > 'aix'=>{'memory'=>'.......', > 'diskfree'=>'......'} > 'W2k'=>{'memory'=>'........', > 'diskfree'=>'......'}); > > my $OS=''; > foreach my $regex (keys %whichos) { > $OS=$whichos{$regex} if ($details=~/$regex/i); > } > die "cannot find OS" unless ( $OS && defined {$commands{$OS}); > > then simply use %commands{$OS}{memory} to get the command you want > > > Phillip Bruce > > ISC Consultant, System Architect > > Location: Dublin, CA > > * Cell: 408-476-8658 > > * Office: 925-560-7853 > > AIM: OkieUnix -- Gary Stainburn This email does not contain private or confidential material as it may be snooped on by interested government parties for unknown and undisclosed purposes - Regulation of Investigatory Powers Act, 2000 -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]