Zoffix Znet > Number-RGB-1.41 > Number::RGB



Annotate this POD


View/Report Bugs
Module Version: 1.41   Source  


Number::RGB - Manipulate RGB Tuples


  use Number::RGB;
  my $white :RGB(255);
  my $black :RGB(0);

  my $gray = $black + ( $white / 2 );

  my @rgb = @{ $white->rgb };
  my $hex = $black->hex;

  my $blue   = Number::RGB->new(rgb => [0,0,255]);
  my $green  = Number::RGB->new(hex => '#00FF00');

  my $red :RGB(255,0,0);

  my $purple = $blue + $green;
  my $yellow = $red  + $green;


This module creates RGB tuple objects and overloads their operators to make RGB math easier. An attribute is also exported to the caller to make construction shorter.



  my $red   = Number::RGB->new(rgb => [255,0,0])
  my $blue  = Number::RGB->new(hex => '#0000FF');
  my $blue  = Number::RGB->new(hex => '#00F');
  my $black = Number::RGB->new(rgb_number => 0);

This constructor accepts named parameters. One of three parameters are required.

rgb is a array reference containing three integers within the range of 0..255. In order, each integer represents red, green, and blue.

hex is a hexadecimal representation of an RGB tuple commonly used in Cascading Style Sheets. The format begins with an optional hash (#) and follows with three groups of hexadecimal numbers representing red, green, and blue in that order. A shorthand, 3-digit version can be used: #123 is equivalent to #112233.

rgb_number is a single integer to use for each of the three primary colors. This is shorthand to create white, black, and all shades of gray.

This method throws an exception on error.


  my $color = Number::RGB->new_from_guess( ... );

This constructor tries to guess the format being used and returns a tuple object. If it can't guess, an exception will be thrown.

Note: a single number between 0..255 will never be interpreted as a hex shorthand. You'll need to explicitly prepend # character to disambiguate and force hex mode.


Accessor and mutator for the red value.


Accessor and mutator for the green value.


Accessor and mutator for the blue value.


Returns a array reference containing three elements. In order they represent red, green, and blue.


Returns a hexadecimal representation of the tuple conforming to the format used in Cascading Style Sheets.


Returns the same thing as "hex", but any hexadecimal numbers that include 'A'..'F' will be in upper case.


Returns a string representation of the tuple. For example, white would be the string 255,255,255.



  my $red   :RGB(255,0,0);
  my $blue  :RGB(#0000FF);
  my $white :RGB(0);

This attribute is exported to the caller and provides a shorthand wrapper around "new_from_guess".


Number::RGB overloads the following operations:


Stringifying a Number::RGB object will produce a string with three RGB tuples joined with commas. All other operators operate on each individual RGB tuple number.

If the tuple value is below 0 after the operation, it will set to 0. If the tuple value is above 255 after the operation, it will set to 255.

Note: illegal operations (such us dividing by zero) result in the tuple value being set to 0.

Operations create new Number::RGB objects, which means that even something as strange as this still works:

    my $color :RGB(5,10,50);
    print 110 - $color; # prints '105,100,60'


Fork this module on GitHub: https://github.com/zoffixznet/Number-RGB


To report bugs or request features, please use https://github.com/zoffixznet/Number-RGB/issues

If you can't access GitHub, you can email your request to bug-Number-RGB at rt.cpan.org


This module is currently maintained by:



You can use and distribute this module under the same terms as Perl itself. See the LICENSE file included in this distribution for complete details.

syntax highlighting: