From e9427749 at stud4.tuwien.ac.at Fri Jul 26 02:08:17 2013 From: e9427749 at stud4.tuwien.ac.at (Josef) Date: Fri, 26 Jul 2013 11:08:17 +0200 Subject: [Vienna-pm] scalar @a vs. scalar @a[0..$#a] Message-ID: <51F23C81.1000909@stud4.tuwien.ac.at> Hallo allerseits! Perl gibt im Scalar-Kontext (per DWIM Ratespiel) verschiedenes zur?ck, wie Anzahl, Ref, ersten oder eben letzten Wert. perl5.16.1> @a=qw(a b c d); say scalar @a; # 4 say scalar @a[0..3]; # d Ist so fix definiert? Wo? Somit auch in zuk?nftige Perl so? Laut perldata: @days[3,4,5] # same as ($days[3],$days[4],$days[5]) Und ja: say scalar( ($a[0],$a[1],$a[2],$a[3]) ); # d Wenn ja w?rde es sich als Idiom eignen: (map{...}@_)[0..$#_] # falls Scalar nur letztes Element statt Anzahl Zumindest h?bscher als: sub {wantarray ? @_ : $_[-1]}->(map {...}@_) Unter der Annahme das wenn im Scalar-Kontext verwendet, auch nur ein Element ?bergeben wird, bleibt die Performancefrage, auf @a vs. @a[0..$#a] im Listkontext? Bzw. andersrum: say scalar qw(a b c d); # d say scalar( ()=qw(a b c d) ); # 4 ciao, Josef From pm.list at perl-services.de Fri Jul 26 02:36:59 2013 From: pm.list at perl-services.de (Renee B) Date: Fri, 26 Jul 2013 11:36:59 +0200 Subject: [Vienna-pm] scalar @a vs. scalar @a[0..$#a] In-Reply-To: <51F23C81.1000909@stud4.tuwien.ac.at> References: <51F23C81.1000909@stud4.tuwien.ac.at> Message-ID: <51F2433B.3060409@perl-services.de> Ja, es ist dokumentiert, dass Listen im Skalarkontext das letzte Element zur?ckliefern. Siehe dazu perldoc perldata ("list value constructors") perldoc perlfaq4 ("What is the difference between a list and an array?") perldoc perlop ("Comma operator") On 26.07.2013 11:08, Josef wrote: > Hallo allerseits! > > Perl gibt im Scalar-Kontext (per DWIM Ratespiel) verschiedenes > zur?ck, wie Anzahl, Ref, ersten oder eben letzten Wert. > > perl5.16.1> > @a=qw(a b c d); > > say scalar @a; # 4 > say scalar @a[0..3]; # d > > Ist so fix definiert? Wo? Somit auch in zuk?nftige Perl so? > > Laut perldata: > @days[3,4,5] # same as ($days[3],$days[4],$days[5]) > > Und ja: > say scalar( ($a[0],$a[1],$a[2],$a[3]) ); # d > > > Wenn ja w?rde es sich als Idiom eignen: > (map{...}@_)[0..$#_] # falls Scalar nur letztes Element statt Anzahl > > Zumindest h?bscher als: > sub {wantarray ? @_ : $_[-1]}->(map {...}@_) > > Unter der Annahme das wenn im Scalar-Kontext verwendet, auch nur ein > Element ?bergeben wird, bleibt die Performancefrage, auf > @a vs. @a[0..$#a] im Listkontext? > > Bzw. andersrum: > say scalar qw(a b c d); # d > say scalar( ()=qw(a b c d) ); # 4 > > ciao, > Josef > > _______________________________________________ > Vienna-pm mailing list > Vienna-pm at pm.org > http://mail.pm.org/mailman/listinfo/vienna-pm From e9427749 at stud4.tuwien.ac.at Fri Jul 26 03:35:43 2013 From: e9427749 at stud4.tuwien.ac.at (Josef) Date: Fri, 26 Jul 2013 12:35:43 +0200 Subject: [Vienna-pm] scalar @a vs. scalar @a[0..$#a] In-Reply-To: <51F2433B.3060409@perl-services.de> References: <51F23C81.1000909@stud4.tuwien.ac.at> <51F2433B.3060409@perl-services.de> Message-ID: <51F250FF.4050807@stud4.tuwien.ac.at> Am 26.07.2013 11:36, schrieb Renee B: > Ja, es ist dokumentiert, [...] Nun dann brauche ich den Trick nur bekannt genug machen, damit ich es als Idiom in meinen Code ohne Gewissensbisse verwenden kann. ;-) ciao, Jo "der dieser Verwendungsweise bisher noch nicht begegnet ist" sef