You might want to check out AnyData or DBD::AnyData which handle pipe-separated files with either a tied-hash or a DBI/SQL interface. BTW, they aren't delimiters - delimiters go around things; they are separators - separators separate things the way the pipes separate the fields in your example.