The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


FirstGoodURL - determines first successful URL in list


  use FirstGoodURL;
  use strict;
  my @URLs = (...);
  my $match;
  if ($match = FirstGoodURL->in(@URLs)) {
    print "good URL: $match\n";
  else {
    print "no URL was alive\n";
  if ($match = FirstGoodURL->with('image/png')->in(@URLs)) {
    print "PNG found at $match\n";
  else {
    print "no PNG found\n";
  if ($match = FirstGoodURL->with(200,204)->in(@URLs)) {
    print "Status: OK or No Content at $match\n";
  else {
    print "no 200/204 found\n";


This module uses the LWP suite to scan through a list of URLs. It determines the first URL that returns a specified status code (with defaults to 200), and optionally, a specified Content-type.


  • FirstGoodURL->in(...)

    Scans a list of URLs for a specified response code, and possibly a requisite Content-type (see the with method below)

  • FirstGoodURL->with(...)

    Sets a Content-type and/or Status requisite value for future calls to in. It is destructive to the previous settings given, so you must send all settings at once.

    This is not backward compatible.

    The argument list can contain a list of Status response codes, and either a list of Content-type response values or a regex to match acceptable Content-type response values. These can appear in any order. The regex must be a compiled one (formed by using qr//).

    This method returns the class name, so that you can daisy-chain calls for readability/snazziness:

      my $match = FirstGoodURL->with(qr/image/)->in(@URLs);


Here is a listing of things that might be added to future versions.

  • Object support (with attributes per object)


  Jeff "japhy" Pinyan