title: Dynamic constant assignment in Ruby
body: <p>Shown below is a ruby code.</p>
  
  <pre><code>def parse_file(file)
    parsed_data = {}
    TOTAL = []
    Maths = []
    Physics = []
    Chemistry = []
    read_lines(file) { |line|
      arr=l.split
      if l.match(/TOTAL/i)
        TOTAL = arr[1].to_i
      end
      if l.match(/maths/i)
        Maths = arr[1].to_i
      end
      if l.match(/physics/i)
        Physics = arr[1].to_i
      end
      if l.match(/chemistry/i)
        Chemistry = arr[1].to_i
      end
    }
    if TOTAL != Maths + Physics + Chemistry &amp;&amp; TOTAL != 0
      parsed_data[:not_matched] = "True"
    end
    return parsed_data
  end
  </code></pre>
  
  <p>It gives multiple "dynamic constant assignment" errors:</p>
  
  <pre><code>-:3: dynamic constant assignment
        TOTAL = []
               ^
  -:4: dynamic constant assignment
        Maths = []
               ^
  -:5: dynamic constant assignment
        Physics = []
                 ^
  -:6: dynamic constant assignment
        Chemistry = []
                   ^
  -:10: dynamic constant assignment
            TOTAL = arr[1].to_i
                   ^
  -:13: dynamic constant assignment
            Maths = arr[1].to_i
                   ^
  -:16: dynamic constant assignment
            Physics = arr[1].to_i
                     ^
  -:19: dynamic constant assignment
            Chemistry = arr[1].to_i
                       ^
  </code></pre>
  
  <p>What change can I make so that it won't affect my intention?</p>