#!/usr/bin/perl use strict; use warnings; use Data::Dumper; package Test; sub new { my ($class, @args) = @_; my $self = {}; bless $self, $class; $self->init(@args); return $self; } sub init { my ($self, @args) = @_; %$self = ( a => 10, b => 20, @args, ); return $self; } package main; my $test1 = Test->new(); print "$test1->{a}\n"; my $test2 = Test->new(a => 40); print "$test2->{a}\n";