Skip to Content.
Sympa Menu

devel - Re: [sympa-developpers] Working on repository

Subject: Developers of Sympa

List archive

Chronological Thread  
  • From: David Verdin <address@concealed>
  • To: address@concealed
  • Subject: Re: [sympa-developpers] Working on repository
  • Date: Tue, 25 Feb 2014 11:48:01 +0100

Dear all,

Sorry for delayed answer. I had a lot of operational stuff to do recently.

Le 24/02/14 14:29, Guillaume Rousse a écrit :
address@concealed">Le 18/02/2014 04:33, IKEDA Soji a écrit :
Mandatory parameter(s) are put on the beginning of argument list
as unnamed values, then optional parameter(s) follow as named
values.

sub foo {
      my $a = shift;
      my $b = shift;
      my %params = @_;

      do_something($a, $b, $params{'c'});
}
Which introduce yet another style, mixing named and positional parameters...

So basically, we have three different style for parameters:
A) positional parameters
sub foo {
     my ($a, $b, $c) = @_;
}
foo($a, $b, $c);

B) named parameters
sub foo {
     my (%params) = @_;
}
foo(arg1 => $a, arg2 => $b, option => $c);

C) mixed parameters
sub foo {
     my ($a, $b, %params) = @_;
}
foo($a, $b, option => $c);

I guess everyone here will agree than enforcing consistent style is
desirable. Can we have a quick poll on prefered style among other
developpers ?

I'm strongly in favor of B, as the most self-describing one. Then A
(simplest), then C.
David, Etienne, Marc, any opinion in this topic
Definitely!

I'm in favour of B for clarity AND for not having to wonder the parameters order when calling a sub.
However, I think it is important to test the presence / absence of expected parameters just after the "my (%params) = @_;" and translate them into local variables. We could even undef the %params hash just after converting its values to local variables.
That way, if we had a new key/value to the params hash and try to use it directly in the code a $hash{$key}, we woul find the b_ug at compile time.

So that could turn to:

B) named parameters
sub foo {
     my (%params) = @_;
    my $email = $params{'email'};
    my $action = "$params{'action'};     undef %params;
    ...
    do_something($email); # Would work
    do_something($params{'option'}); # Would issue in strict mode '%params needs to be defined...'
}
foo(email => $a, action =">" $b, option => $c);

address@concealed"> before it turns out into yet another ping-pong discussion between Soji and myself ?
address@concealed">
How about use of "shift"?
I don't really care about using 'shift', 'pop', 'push' or any other way to retrieve subroutine parameters, this is mostly an implementation detail. What matters here is enforcing consistant subroutines prototypes.
Same here.

--
A bug in Sympa? Quick! To the bug tracker!

 
David Verdin
Études et projets applicatifs
 
Tél : +33 2 23 23 69 71
Fax : +33 2 23 23 71 21
 
www.renater.fr
RENATER
263 Avenue du Gal Leclerc
35042 Rennes Cedex



PNG image

Attachment: smime.p7s
Description: Signature cryptographique S/MIME




Archive powered by MHonArc 2.6.19+.

Top of Page