Template Toolkit (and several other modules) use this idiom:

  sub new {
    my $class  = shift;

    # allow hash ref as first argument, otherwise fold args into hash
    my $config = defined $_[0] && UNIVERSAL::isa($_[0], 'HASH')  ?
shift : { @_ };
    ..
  }

Which lets you do any of these:

  my $foo = Foo->new(ONE => 1, TWO => 2);
  my $bar = Foo->new({ONE => 1, TWO => 2});
  my $baz = Foo->new(\%opts);

This is very convenient for when you've got a large hashref of options
and don't want to unroll it for passing to a method.

-- 
(darren)

Reply via email to