sub routine {
my($thingy, $tx) = @_; # $thingy is not used
print "routine: $tx\n";
}
my $ref = \&routine; # take a reference to the sub
my $pkg = "main";
my $obj = bless do { \my $x };
# we could also say...
# my $pkg = __PACKAGE__;
# ...to get any package we are in in compile time
####
# method calls
main->routine("foo");
main->$ref ("foo");
$pkg->routine("foo");
$pkg->$ref ("foo");
$obj->routine("foo");
$obj->$ref ("foo");
# or even
(join'',map{chr}(109,97,105,110))->routine("foo");
__PACKAGE__->$ref("foo");
(bless \my $x)->$ref("foo");
# function calls
routine ('main', "foo");
$ref -> ('main', "foo");
routine ($pkg, "foo");
$ref -> ($pkg, "foo");
&$ref ($pkg, "foo");
routine ($obj, "foo");
# etc.
####
my (undef, $thing) = @_;
####
shift @_; # drop first element of argument list
my ($thing) = @_;