Jak vynutit list kontext?

Pavel Smerk xsmerk na fi.muni.cz
Pátek Prosinec 5 16:57:26 CET 2014


On Fri, Dec 05, 2014 at 10:02:42AM +0100, Jan Kasprzak wrote:
> jaky je nejrozumnejsi zpusob, abych necemu vnutil seznamovy kontext?
> V llama book se pise u funkce scalar:
> 
> > Oddly enough, there's no corresponding function to force list context.
> > It turns out you almost never need it.  Trust us on this, too.
> 
> Tohle je potreba, kdyz chci pocet prvku vraceneho pole, ale to pole
> je vracene z neceho, co ve skalarnim kontextu vraci neco jineho,
> napriklad pouze prvni prvek.
> 
> Ja jsem na to narazil u file-globu, napriklad chci zjistit, kolik v adresari
> mam perlovych zdrojaku:
> 
> @a = <*.pl>;
> print "Pocet je ", scalar @a, ".\n";
> 
> No ale pokud fakt ten seznam nepotrebuji a potreboval bych jen pocet?
> Konstrukce
> 
> $a = <*.pl>;
> print "Pocet je $a.\n";
> 
> vrati jmeno prvniho perloveho zdrojaku, coz nechci. Prisel jsem tak leda
> na konstrukci typu
> 
> $a = () = <*.pl>;

No já asi v takových případech píšu @{[<*.pl>]}, ale jestli je to
průhlednější nebo elegantnější, to nevím (kratší to není :-).

> print "Pocet je $a.\n";
> 
> Coz sice funguje, ale nevim jestli kdyz nekdo prijde po mne, bude
> na prvni pohled vedet, co tento kus kodu dela. Existuje neco elegantnejsiho?

=()= jsem teda nikdy nepoužil, ale jinak je to ve všech těch seznamech typu
http://www.catonmat.net/blog/secret-perl-operators/, čili by to snad
"pasivně" nemělo překvapit ani toho, kdo to "aktivně" nepoužívá.

							S pozdravem,	P.


Další informace o konferenci Perl