Value not stored in file <Perl> -


i new perl. motive read value txt file , use in perl script.

the text file ::

servers ::                  (local)        tomas-server1        tomas-server2       .........** 

what need 3rd line value (tomas-server2) , use in perl script. calling 3rd value perl script.

i have written basic code ::

my($servname1,$servname,$servname3) = getservername($servername); ($filenam) = 'data.txt'; @param = ();  open(infile,"<$filenam") or die "couldn't open $filenam reading\n"; while(<infile>) {     chop($_);      push(@param,$_); } close(infile); return @param; } 

but when try use "$servname2" value , not return anything. guess value contained should "(local)" it.

there few problems example data, think understand trying do. assuming want third server value (and not line #3) want have code looks this...

#!perl  #some includes use strict; use warnings; use data::dumper;  #set vars $targetfilename="data_file.txt"; $targetservernumber=3;  #call sub @serverarray=getservername($targetfilename);  #did back? if(@serverarray) {     #yep, got content     print "server number ".$targetservernumber."/".($#serverarray+1)." \"".$serverarray[$targetservernumber-1]."\"\n"; #array numbers 0-based } else {     #nope, read file didn't matching content     print "no servers found in file \"".$targetfilename."\".\n"; } #end if  print "\n"; print "here's loaded \@serverarray...\n"; print data::dumper::dumper(@serverarray); #so can see full content of @serverarray print "all done\n"; exit;  #----- subs go here -----  sub getservername {     $datafilename=shift; #pull in first arg - alters @_ rest of sub, take care when doing     @returnarray;     #do qa     if(!$datafilename) {die "you need provide file name use sub.\n"} #do have file name?     if(!stat($datafilename)) {die "the requested file name of \"".$datafilename."\" not exist.\n";} #does file exist?     open(infile, "<".$datafilename) or die "unable open \"".$datafilename."\" - ".$!;      #ok, read file content     while(my $line=<infile>) {         chop($line);         $line=~s/^\s+//g; #remove leading white spaces         $line=~s/\s+$//g; #remove trailing white spaces         if(!$line) {next;} #blank line, skip          #check headers         if($line=~m/^servers/) {next;} #skip lines beginning "servers"         if($line=~m/^\(local\)/) {next;} #skip lines beginning "(local)"          #if here, must want line content, add array         push(@returnarray, $line);     } #end while     close(infile);      #send array data back, if     return @returnarray } #end getservername sub  __end__  stuff below here not need commented 

i admit not best way approach problem, perl hacks, works. you'll notice code bit overkill , validation checks before passing data operations - habit of doing in language work in. return more meaningful errors when things go wrong , catch data related problems. sample code bit of data cleanup because leading , trailing cause problems later on. blank lines (after cleaning) removed.

btw, data file used example this...

servers ::                  (local)        tomas-server1        tomas-server2          tomas-server3       tomas-server4        tomas-server5        tomas-serverlast 

Comments

Popular posts from this blog

c++ - CryptStringToBinary API behavior -

c++ - Correct method for redrawing a layered window -

java.util.scanner - How to read and add only numbers to array from a text file -