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
Post a Comment