man MP3::Tag::ParseData () - Module for parsing arbitrary data associated with music files.


MP3::Tag::ParseData - Module for parsing arbitrary data associated with music files.


   # parses the file name according to one of the patterns:
   $mp3->config('parse_data', ['i', '%f', '%t - %n - %a.%e', '%t - %y.%e']);
   $title = $mp3->title;

see MP3::Tag


MP3::Tag::ParseData is designed to be called from the MP3::Tag module.

Each option of configuration item CWparse_data should be of the form CW[$flag, $string, $pattern1, ...]. For each of the option, patterns of the option are matched agains the CW$string of the option, until one of them succeeds. The information obtained from later options takes precedence over the information obtained from earlier ones.

The meaning of the patterns is the same as for parse() or parse_rex() methods of CWMP3::Tag. Since the default for CWparse_data is empty, by default this handler has no effect.

$flag is split into 1-character-long flags (unknown flags are ignored): the string-to-parse is interpolated first; the string-to-parse is interpreted as the name of the file to read; the file should be read in CWbinary mode; the string-to-parse is interpreted as collection of lines, one per track; the string-to-parse is interpreted as collection of lines, and the first matched is chosen; the resulting string is interpolated before parsing. the patterns are considered as regular expressions. one of the patterns must match. With CWo or CWO interpret the pattern as a name of file to output parse-data to. With CWO the name of output file is interpolated. When CWD is present, intermediate directories are created. Do not strip the leading and trailing blanks. (With output to file, the output is performed in binary mode too.) Do not ignore a field even if the result is a 0-length string.

Unless CWb option is given, the resulting values have starting and trailing whitespace trimmed. (Actually, split()ing into lines is done using the configuration item CWparse_split; it defaults to CW"\n".)

If the configuration item CWparse_data has multiple options, the CW$strings which are interpolated will use information set by preceeding options; similarly, any interolated option may use information obtained by other handlers - even if these handers are later in the pecking order than CWMP3::Tag::ParseData (which by default is the first handler). For example, with

  ['i', '%t' => '%t (%y)'], ['i', '%t' => '%t - %c']

and a local CDDB file which identifies title to CW'Merry old - another interpretation (1905)', the first field will interpolate CW'%t' into this title, then will split it into the year and the rest. The second field will split the rest into a title-proper and comment.

Note that one can use fields of the form

  ['mz', 'This is a forced title' => '%t']

to force particular values for parts of the MP3 tag.

The usual methods CWartist, CWtitle, CWalbum, CWcomment, CWyear, CWtrack, CWyear can be used to access the results of the parse.

It is possible to set individual id3v2 frames; use %{TIT1} or some such. Setting to an empty string deletes the frame if config parameter CWid3v2_frame_empty_ok is false.