You mean you don't like writing things like...
sub foo {
my ($a, $b, $c) = shift;
?You mean you don't like writing things like...
sub foo {
my ($a, $b, $c) = shift;
?It just grinds my gears that _I_ need to check to see if the caller has given me all the required bits. That seems like something the language should do.
I understand that it does give you a lot of flexibility, but Hnnnnnnnnn
(from what I recall object oriented perl doesn't give you this flexibility, but I'm not sure, as I never really did it. )
If you have a module called "My::Module", and you call "My::Module->some_method", then you'd implement that like:
sub some_method {
my ($pkg, @args) = @_;
i.e. the module gets passed (as a string) as the first argument. You can then call $pkg->some_other_method;
And similarly, if you have an object "$foo" you would call it like "$foo->some_other_method" and implement it as: sub some_method {
my ($self, @args) = @_;
i.e. the object gets passed as the first argument. And you can call "$self->some_other_method" with it.A minimal class is just:
package My::Module;
sub new {
my ($pkg, %opts) = @_;
my $self = bless \%opts, $pkg;
return $self;
}
1;
Don't let them tell you you need Moo or Moose or Mouse or fields.pm. Hand-rolled objects is the way :) Yes, I hate to write
sub foo($$$) {
my ($a, $b, $c) = @_;
}
Where @_ is array of arguments, and ($$$) is function prototype (3 scalars are expected).sub foo ($x, $y, $x) { ...}
It's just syntactic sugar, so you still can't pass in multiple lists, and the list must be the final parameter.
1. shift only shifts off the first element.
2. (if classify this as a bug) using $a and $b are frowned upon because they're the default variables when using sort.
my ($x, $y, $z) = @shift;
:-DValid is either
sub () {
my ($x, $y, $z) = @_;
or sub ($x, $y, $z) { my ($x, $y, $z) = @$_[0];
but I was making a joke.If $_[0] is an array reference, @$_[0] becomes a list.
The joke was a reference to most wrong Perl programs being valid for something.
Hence the meme: "93% of Paint Splatters are Valid Perl Programs"