sub make{
my ($self,$arg) = @_;
if (ref $arg eq 'ARRAY'){
foreach my $t (@{$arg}){
if (ref $t eq 'HASH'){
_ss($t)
};
}
}
}
sub _ss {
my ($self, %arg) = @_;
print Dumper(\%arg);
}
You probably mean
$self->_ss($t)
since in sub _ss() you are shifting away the first argument into $self.
What happens next? You assign the arguments to a hash, but in the calling code you just pass a single reference, not a key/value pair. So your hash reference ends up as a stringified key in %arg with no value attached.
perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'