
Writing table-driven tests is usually a good idea. adding a test case doesn't require adding code, so it's easy to avoid fucking up the other tests. however, actually going from a table of tests to a test that runs is non-trivial.
test::tabledriven makes writing the test drivers trivial. you simply define your test cases and write a function that turns the input data into output data to compare against. c
will compute how many tests need to be run, and then run the tests.
concentrate on your data and what you're testing, not
plan tests => scalar keys %test_cases
and a big foreach loop.