пятница, 23 октября 2009 г.

Прототипы и аргументы из списка

Вызывая подпрограмму

sub foo($$$$) { }

Так хочется вместо, например,

foo(1, $foo{1}, $foo{3}, $foo{5});

Написать

foo(1, @foo{qw(1 3 5)});

Но нельзя, так как Perl ругается, что недостаточно аргументов. :-(

2 комментария:

Bacek комментирует...

С этим в 6-ку. Примерно так:

sub foo($a, $b, $c) { ... }

foo(|@a<1 3 5>);

:)

hobbified комментирует...

This is one reason why prototypes are bad. But if you can't avoid them you can do this:

&foo(1, @foo{qw(1 3 5)})

The & disables prototypes!