As far as handling references goes, you're almost spot on. The only thing you need to do is dereference $line in the loop where you're printing it out, by putting another $ in front of it like this:
foreach my $line (@elements) {
print "$$line<br/>";
...
}
This is because the $line that gets created in the
foreach my $line (@elements) bit isn't a scalar. It's a reference to a scalar (which makes sense because that's what's stored in @elements).
Just as an aside, I'm not sure you even need to be storing references in the first place. Why not just store the actual values of $hall_name, etc. in @elements? Unless you're planning to modify them between putting them in the array and printing them out, storing the values would work just as well with the added bonus of making your code slightly easier to follow.