How is that easier then my $start_dir = shift; ???
Since $id3v1 and $id3v2 are both going to be objects, the distinction between undef and 0 isn't really relevant, so you should be able to simplify about 20 lines of initialization with something like...
...seems like the worst possible behavior you could have as a fallback. If instead you leave the fields blank, you can at least easily identify them later and you leave it up to the application to decide what to do about it (ie: display some string like "Unknown Artist", or prompty you, or try to fetch the metadata from an external music identification site).
File::Find is your friend. It's been a core module for a while now, so you don't even need to worry about installing it.