Карринг

Рассмотрим модуль, предложенный в качестве примера в секции "Необязательные параметры":

    sub order-burger( $type, $side? ) { ... };

Если вы часто используете order-burger и в основном вместе с картофелем фри, то наличие процедуры order-burger-and-fries может оказаться кстати:

    sub order-burger-and-fries ( $type ) {
        order-burger( $type, side => 'french fries' );
    }

Если персональный заказ всегда вегетарианский, то может понадобится процедура order-the-usual с необязательным параметром:

    sub order-the-usual ( $side? ) {
        if ( $side.defined ) {
            order-burger( 'veggie', $side );
        }
        else {
            order-burger( 'veggie' );
        }
    }

Карринг позволяет создавать сокращения для подобных применений. С помощью карринга создается новая подпрограмма на основе существующей с некоторыми предустановленными параметрами. В Perl 6, карринг создается методом .assuming:

    &order-the-usual        := &order-burger.assuming( 'veggie' );
    &order-burger-and-fries := &order-burger.assuming( side => 'french fries' );

Новая подпрограммы похожи на другие и поддерживают одни и те же структуры входных параметров.

    order-the-usual( 'salsa' );
    order-the-usual( side => 'broccoli' );

    order-burger-and-fries( 'plain' );
    order-burger-and-fries( :type<<double-beef>> );