www.meteoalarm.eu offers data for extreme weather situations in 30 european countries. I wrote this object oriented interface to retrieve data from the website. Although I did my best to provide valid data there can be no guarantee for the reliability of the data from the module. I wrote the module only for informational purposes and it is not meant to use it for anything critical.

Update: With the detailed advice from wfsp I changed the evaluation of the html code from regexp to HTML::Treebuilder. That allows more robust parsing of the data. There is still plenty of space for more improvements (I am not happy with

It might be worth considering separating out extracting the data from the HTML. It could make the flow of the logic a bit easier. I would also recommend using a parser rather than regexes which can get a bit tricky on HTML.

I was unable to find a page on the website that corresponded to your regexes so I have taken a guess at what it might look like. If you could post a link to an actual page you're dealing with we might have more to go on. For instance, this uses HTML::TokeParser::Simple to do a single pass examining every token and extracting data as appropriate (it covers similar ground to the regex in your _extract_details method).

If the page is well structured it may be more appropriate to consider something like HTML::TreeBuilder which is more powerful and could simplify proceedings greatly.

I never got a handle on the HTML::TokeParser module so I try to get the data with regexp. But you are right: this is not to proper way to do it.
To get the warnings of all countries the script evaluates http://www.meteoalarm.eu/ I changed your

As you can see, you have to be aware you're handling UTF8 (which, because it uses HTML::Entities) is what HTML::TreeBuilder returns). Beware of decoding anything twice. And don't trip up on the non breaking spaces (&nbsp;) that are scrattered librally throughout the source.

The website http://www.meteoalarm.eu got a makeover and new features like a tendency for weather events and queries for specific weather events were added.
The updated code reflects to the changes and new features.