perl6.suОсвоим perl6 к 2015 году!

nota LXXIV. |@list


       Вполне может быть такая ситуация, что будущие аргументы субрутины мы держим в одном массиве. Вместо того, чтобы писать routine(@list[0],@list[1]... можно использовать |@list. Предположим, что наша субрутина выводит на печать латинские падежи:
    
#!/usr/bin/perl6
my @list=<ego mei mihi me me>;
routine(@list[0],@list[1],@list[2],@list[3],@list[4]); # можно так
routine(|@list); # а можно и так
# routine(@list); # так нельзя, потому что ожидается пять скаляров
sub routine($nom,$gen,$dat,$acc,$abl) {
	say "N.\t$nom\nGen.\t$gen\nDat.\t$dat\nAcc.\t$acc\nAbl.\t$abl";
	}
N.	ego
Gen.	mei
Dat.	mihi
Acc.	me
Abl.	me
N.	ego
Gen.	mei
Dat.	mihi
Acc.	me
Abl.	me

       Интересно, а как сделать наоборот? То есть когда рутина ждет один массив, а у нас в кармане только пять скаляров.
    
#!/usr/bin/perl6
my ($nom,$gen,$dat,$acc,$abl)=<ego mei mihi me me>;
routine(($nom,$gen,$dat,$acc,$abl));
sub routine(@list) {
	@list».say;
	}
me
mihi
ego
me
mei

       Ergo надо просто добавить еще одну пару круглых скобок, что превращает пять скаляров в один ожидаемый массив.
# mutatio postrema: 22 Sep 2010

   sub      charta situs       nota LXXIII <<     >> nota LXXV   

    RSS     stdin@perl6.su    © Alexius Karmanov, 2010-2011