in reply to Orbital starters

my ($class,$d) = shift;
in my understanding, this "initializes" $d with undef. Why don't you
my ($class,$d) = @_;
Personally, I'd do it this ("mixed") way:
my $class = shift; my ($args, $as, $needed) = @_;
to have the argument list in the same manner as in the corresponding method call.

Update: see also this discussion from several years ago

Update: typo corrected. Thanks AnomalousMonk!

Replies are listed 'Best First'.
Re^2: Orbital starters
by holyghost (Beadle) on Oct 10, 2017 at 10:26 UTC
    You can use $_ and @_ AFAIK

      They are different. You can run the following example.

      The part below the __DATA__ shows the expected output: $VAR1 is $_, $VAR2 is @_
      (the \ in the Dumper statement is to have @_ formatted as array rather than individual scalars).

      Before you go hunting for that odd Perl version: it specifies the minimum version. If your Perl is even older, you can change use 5.011 to use strict and say by print.

      #!/usr/bin/env perl use 5.011; # implies strict + feature 'say' use warnings; use Data::Dumper; for (1 .. 2) { say "in loop:"; say Dumper $_; test(3, 4); } sub test { say "in sub:"; # $VAR1 $VAR2 say Dumper $_, \@_; } __DATA__ in loop: $VAR1 = 1; in sub: $VAR1 = 1; $VAR2 = [ 3, 4 ]; in loop: $VAR1 = 2; in sub: $VAR1 = 2; $VAR2 = [ 3, 4 ]; ];
      No and yes, respectively.