[Vienna-pm] scalar @a vs. scalar @a[0..$#a]

Renee B pm.list at perl-services.de
Fri Jul 26 02:36:59 PDT 2013


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



More information about the Vienna-pm mailing list