It seems silly to create an entire new file when I could just be editing the $c variable in the input file... am I right?
I don't think so. Creating a whole new file seems the right way to do it in this case.
A file on the disk is essentially like a stream of bits. There is no way to "insert" some extra bits in that stream without re-writing all of the bits that come after that insertion. Tie::File can "hide" some of this reality from you, but the physical situation remains the same.
A database can allow the modification of a column, but the data structures are much more complex than a simple line oriented file. If you want to modify say field 4 in a .CSV file, yes re-writing the entire file is the right way to go.
There is a DBI module that handles .csv files, but again it will wind up re-writing the entire .csv file. It will cache stuff, but at the end of the day, a new file will be written.