Jon Portnoy


IRC::Toolkit::Case - IRC case-folding utilities


  use IRC::Toolkit::Case;

  my $lower = lc_irc( $string, 'rfc1459' );

  my $upper = uc_irc( $string, 'ascii' );

  if (eq_irc($first, $second, 'strict-rfc1459')) {

  # Or use the '|rfc1459|' operator if using RFC1459 rules:
  if ($first |rfc1459| $second) {



IRC case-folding utilities.

IRC daemons typically announce their casemap in ISUPPORT (via the CASEMAPPING directive). This should be one of rfc1459, strict-rfc1459, or ascii:

  'ascii'           a-z      -->  A-Z
  'rfc1459'         a-z{}|^  -->  A-Z[]\~   (default)
  'strict-rfc1459'  a-z{}|   -->  A-Z[]\

If told to convert/compare an unknown casemap, these functions will warn and default to RFC1459 rules.

If you're building a class that tracks an IRC casemapping and manipulates strings accordingly, you may also want to see IRC::Toolkit::Role::CaseMap.

rfc1459 operator

The infix operator |rfc1459| is provided as a convenience for string comparison (using RFC1459 rules):

  if ($first |rfc1459| $second) { ... }
  # Same as:
  if (eq_irc($first, $second)) { ... }


Takes a string and an optional casemap.

Returns the lowercased string.


Takes a string and an optional casemap.

Returns the uppercased string.


Takes a pair of strings and an optional casemap.

Returns boolean true if the strings are equal (per the rules specified by the given casemap).


  my $str = irc_str( strict => 'Nick^[Abc]' );
  if ( $str eq 'nick^{abc}' ) {
    # true

Takes a casemap and string; if only one argument is provided, it is taken to be the string and a rfc1459 casemap is assumed.

Produces overloaded objects (see IRC::Toolkit::Case::MappedString) that can be stringified or compared; string comparison operators use the specified casemap.


Jon Portnoy <>

Inspired by IRC::Utils, copyright Chris Williams, Hinrik et al

Licensed under the same terms as Perl.