From: "Douglas A. Seifert" Date: 2008-07-17T22:42:37+09:00 Subject: Re: Help with array Victor Reyes wrote: > Hello team, > > I am having an issue with the code below. > Could you please take a quick look at the highlighted and commented code > below and let me know what's wrong? > > Thank you > > Victor > > > input.file > group.was=hostname1 hostname.2 hostname.r3 > group.web=webserver1 webserver2 webserver3 hostname1 /usr/local/bin/test.sh > web /usr/local/bin/testcmd.sh > #end of input.file > > # Program > @myhostname = `hostname` # webserver3 > #comment# The intent is to create a arrays "was" and "web" and to assign the > values in the group statement > IO.foreach("inpit.file") do |line| > if line =~ /^#/ || line.chomp.length == 0 > next > end # if line > if line.upcase =~ /^GROUP/ > grouplit, groupinfo = line.split(".") > groupname, groupentries = groupinfo.split("=") > #{groupname} = groupname.to_a > groupname = groupentries.split > next > end # if GROUP > targetserver, command = line.split(" ") > if targetserver == @myhostname > @runcommand = true > end # if targetserver > #comment# In this case I'm trying to determine if "myhostname" is in the > array "web" > #comment# I've tried a number of ways to get the following to work without > success > if #{targetserver}.*include?* "#{@myhostname <%23%7B@myhostname>}" > ####### THIS IS WHERE THE FAILURE IS > @runcommand = true > end # if > end > exit > > Victor, In ruby, a statement like #{foo} = 'bar' just won't work. You are trying to use "dynamic variables" (ala PHP I guess) and that simply does not work in ruby. Here is a version of your code that I think does what you are trying to do. I removed the @ sigils on the variable names ... you might need to add them back if you took this code out of a class you are working on. I also stored the group arrays in a ruby Hash object keyed by the group name. There are other ways to do this, the best one depends on your specific needs. You also had what looked to be a misspelling in the IO.foreach statement: your version was opening 'inpit.file' not 'input.file'. # Program #@myhostname = `hostname` # webserver3 myhostname = 'webserver3' runcommand = false command_to_run = nil #comment# The intent is to create a arrays "was" and "web" and to assign the values in the group statement groups = {} IO.foreach("input.file") do |line| if line =~ /^#/ || line.chomp.length == 0 next end # if line if line.upcase =~ /^GROUP/ grouplit, groupinfo = line.split(".") groupname, groupentries = groupinfo.split("=") groups[groupname] = groupentries.split next end # if GROUP targetserver, command_to_run = line.split(" ") if targetserver == myhostname runcommand = true end # if targetserver #comment# In this case I'm trying to determine if "myhostname" is in the array "web" #comment# I've tried a number of ways to get the following to work without success end if groups['web'].include?(myhostname) ####### THIS IS WHERE THE FAILURE IS runcommand = true end puts "groups: #{groups.inspect}" puts "run command: #{runcommand}, command: #{command_to_run}" exit