1. #!/usr/bin/env perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. use Data::Dump;
  6. my $str = '';
  7. my @time_table;
  8. while ( my $buf = <DATA> ) {
  9. $str .= $buf;
  10. if ($str =~ s/
  11. <div\s+[^>]*class=['"]\s*event-time\s+calendar-\d+\s*['"][^>]*>\s*
  12. (\d\d?):(\d\d?) \s*-\s* ((\d\d?):(\d\d?))? \s*<\/div>
  13. |
  14. <p\s+[^>]*class=['"]\s*(description|summary)\s*['"][^>]*> (.*) <\/p>
  15. //sx
  16. )
  17. {
  18. if ( defined $1 ) {
  19. push @time_table, { 'hh_s' => $1, 'mm_s' => $2 };
  20. }
  21. if ( defined $4 ) {
  22. push @time_table, { 'hh_f' => $4, 'mm_f' => $5 };
  23. }
  24. if ( defined $6 ) {
  25. push @time_table, { $6 => $7 };
  26. }
  27. }
  28. }
  29. ddx 0 + @time_table => @time_table;
  30. __DATA__
  31. <div class="event-time calendar-1">12:45 -
  32. 14:00</div>
  33. <div class="event-time calendar-1">12:46 -
  34. </div>
  35. <div class="event-time calendar">12:47 -
  36. 14:01</div>
  37. <div class="something else entirely">The time is now
  38. 05:46</div>
  39. <p class="summary">abcd efgh</p>
  40. <p class="description">ijkl mnop</p>