The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use strict;
use warnings;

my $surface = Cairo::ImageSurface->create ('argb32', 1000, 1000);
my $context = CustomContext->create ($surface);
$context->draw_star;
$context->show_page;
$surface->write_to_png ($0 . '.png');

package CustomContext;

use strict;
use warnings;
use Cairo;
use Math::Trig qw/pi/;

use base qw/Cairo::Context/;

sub create {
  my ($package, $surface) = @_;

  my $self = $package->SUPER::create($surface);

  return bless $self, $package;
}

sub draw_star {
  my ($self) = @_;

  my $width = $self->get_target()->get_width();
  my $height = $self->get_target()->get_height();

  $self->rectangle (0, 0, $width, $height);
  $self->set_source_rgb (1, 1, 1);
  $self->fill;

  $self->save;
  {
    $self->set_source_rgba (0, 0, 0, 0.5);
    $self->translate ($width / 2, $height / 2);

    my $mx = $width / 3.0;
    my $count = 100;
    foreach (0 .. $count-1) {
      $self->new_path;
      $self->move_to (0, 0);
      $self->rel_line_to (-$mx, 0);
      $self->stroke;
      $self->rotate ((pi() * 2) / $count);
    }
  }
  $self->restore;
}