次のコードに欠けているものがあります。
hostnames = []
ip_addrs = []
hw_addrs = []
File.open("/etc/dhcp/dhcpd.conf", "r").each_line do |line|
unless line.match('#') # Make sure the line is not commented
if line.match("host-name")
hostname = line.scan(/"([^"]*)"/) # extract the Hostname
elsif line.match("fixed-address")
ip_addr = line.scan(/(\S*);/) # Extract IP addr
elsif line.match("ethernet")
hw_addr = line.scan(/(\S*);/) # Extract the HW address
end
end
hostnames + hostname.to_a if hostname # Protect against `nil' values
ip_addrs + ip_addr.to_a if ip_addr # Same
hw_addrs + hw_addr.to_a if hw_addr # Same
end
puts hostnames.inspect # Should be a list of hostnames...
これにより、ファイルで見つかった値が配列に入力されdhcpd.conf
ます。ブロック内の値をFile.open.each_line
出力すると、完全なリストが STDOUT に出力されます。ブロック外の値を取得しようとすると、空の配列が取得されます。
ブロックは私の変数のコピーを生成し、それらで動作すると思いますが、それらはブロックから戻されません。内部がどのように機能するかはわかりません。ただの推測です。