The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for LyricFinder

1.00    2020/12/15
        First version, released on an unsuspecting world.
        (Converted from David Precious's Lyric::Fetcher and friends)
1.01    2021/01/15
        - LyricFinder::Musixmatch - Handle non/high/wide/utf8 ascii characters 
        in artist and title fields, ie. accented characters - Musixmatch.com 
        allows these in searches and encodes them in the page URL.
        - Add URI::Escape to prerequesites.
        - Small Pod/doc. tweaks.
1.02    2021/05/11
        - LyricFinder::Musixmatch - Fix bug that cut off first few lines 
        of lyrics (due to their site separating an abreviated version of the 
        first few lines from the rest of the lyrics).  Also added a 
        "(Musixmatch status:  ok|warning|error)" line at bottom indicating 
        what Musixmatch thinks of the state of the selected song's lyrics.
1.03    2021/05/13
        - Added LyricFinder::Letras (https://www.letras.mus.br).
        - Added optional integer 4th argument to LyricFinder->fetch() to 
        allow limiting # of sites tried (Default is to try all (currently 
        5 sites installed) until lyrics are found.  Use this with the 
        'random' option to limit the time spent searching before giving up.
        If zero or >= 5 (current # of sites), all 5 sites will be tried.
        - LyricFinder::Genius: Add conversions of accented characters to 
        their unaccented equivalents to handle some non-English artist and 
        song names.
1.10    2021/05/26
        - Refactor all modules to combine all common methods into a separate 
        internal module:  LyricFinder::_Class (new) to greatly simplify and 
        eliminate redundant code.  This should make creating new site modules 
        much simpler (now most if not all functions other than new(), fetch(), 
        and the internal function _parse() should not be required in site 
        modules unless it's necessary to override)!
        This better follows proper object-oriented programming standards.
        - LyricFinder::Genius - Fix failure to fetch lyrics due to changes in 
        their site (to increase obfuscation, I presume).
        - LyricFinder::Musixmatch - Add "-nostatus" option to suppress the 
        additional "status" message appended to Musixmatch lyrics.  NOTE: this 
        option will also be used in future to suppress any additional info. 
        that may be offered by other sites as well (only actual lyrics will 
        be returned, if specified).
        - Upgrade default user-agent to Mozilla Firefox v84.
        - Fixed bug preventing caching fetched lyrics if -cache directory had 
        the ">" (write-only) option prepended.
1.11    2021/05/26
        - Doc fixes, namely "-nostatus" should be "-noextra" and the effect 
        (if specified) is to SUPPRESS the extra status message, if any!
        Docs implied the opposite.
1.20    2021/05/29
        - Added LyricFinder option "-omit" to specify submodules that you 
        have installed to NOT be used, ie. -omit => "AZLyrics,Genius".  
        This can limit which submodules will be used for "all" or "random" 
        searches.
        - Added image_url() function to return the cover-art image on some 
        lyric sites (currently Genius and Musixmatch).  For other sites and 
        songs that do not provide an image, an empty string is returned.
        - LyricFinder::Letras - Verify that lyrics page returned matches the 
        artist / title being searched for and fail (return no lyrics) if not.
        (Letras has been khown to try to "guess" the song if they do not have 
        the exact one you're asking for)!
1.21    2021/12/01
        LyricFinder::Letras - Fix - Was broken due to slight change in their 
        site (wasn't returning any lyrics due to "artist mismatch".