The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
NAME
    CTKlib - Command-line ToolKit library (CTK). Command line interface (CLI)

VERSION
    Version 1.17
    
    $Id: README 184 2015-05-12 10:15:56Z minus $

SYNOPSIS
    
    use CTK;

    use CTK qw/ ...TAGS... /
    
    use CTK qw/ ...VARIABLES, FUNCTIONS AND PROCEDURES... /

ABSTRACT
    Ïðîåêò CTKlib ñîäåðæèò íåñêîëüêî áèáëèîòåê ðàáîòû ñ ìåõàíèçìàìè îáñëóæèâàþùèå êîìàíäíóþ ñòðîêó
    
    SVN: http://svn.serzik.ru/CTKlib/trunk
         svn co http://svn.serzik.ru/CTKlib/trunk CTKlib

DESCRIPTION

The project ... blah-blah-blah

Áèáëèîòåêà, ïðèçâàííàÿ îáúåäåíèòü â ñåáå îñíîâíîé èíñòðóìåíòàðèé äëÿ ñîçäàíèÿ ðîáîòîâ. 
CTK âêëþ÷àåò â ñåáÿ ìåõàíèç ðàáîòû ñ êîìàíäíîé ñòðîêîé, îòïðàâêè ïî÷òû, ñîåäèíåíèÿ ñ ÁÄ, 
ñîåäèíåíèÿ ñ HTTP/FTP/SSH è ïðî÷èìè ñåðâåðàìè ñ öåëüþ ïåðåäà÷è èíôîðìàöèè è âûïîëíåíèÿ óäàëåííûõ 
êîìàíä... è ìíîãî-ìíîãî äðóãèõ óòèëèò, âñòðîåííûõ â îäèí ïðîåêò, êîòîðûé äîñòàòî÷íî èñïîëüçîâàòü 
ñ ïîìîùüþ âûçîâà use CTK

CTK ñîñòîèò èç 2-õ âåòâåé - èç óòèëèòàðíîé (ïðîöåäóðíîé) è ôóíêöèîíàëüíîé (îáúåêòíîé). Óòèëèòàðíàÿ 
âåòâü îáåñïå÷èâàåò äîñòóï ê ÷àñòî èñïîëüçóåìûì ôóíêöèÿì, êîòîðûå ìîæíî óñëîâíî ðàçäåëèòü íà ãðóïïû.
Ýòî ôóíêöèè ðàáîòû ñ äàòîé è âðåìåíåì, ôóíêöèè êîíâåðòèðîâàíèÿ ôîðìàòîâ, áàçîâûå ôóíêöèè ðàáîòû ñ 
ôàéëàìè è äèðåêòîðèÿìè, à òàêæå äðóãèå ôóíêöèè, êîòîðûå âñåãäà ìîæíî íàéòè â ïàêåòå CTK::Util.

Ôóíêöèîíàëüíàÿ æå âåòâü, ïîçâîëÿåò îïåðèðîâàòü ìàêðîîáúåêòàìè, êàæäûé óñëîâíûé êëàññ òàêèõ îáúåêòîâ
íîñèò ñâîå èìÿ: CTK::Arc (ðàáîòà ñ àðõèâàìè), CTK::File (ðàáîòà ñ ôàéëàìè), CTK::Net (ðàáîòà ñ ñåòåâûìè
ðåñóðñàìè) è ò.ä. Âñå ìåòîäû ýòèõ êëàññîâ âûçûâàþòñÿ ÷åðåç ãëàâíûé îáúåêò CTK: $c? íàïðèìåð:

    package main;
    use CTK qw/ $DATADIR /
    ...
    1;
    package my::mainlib;
    my $c = new CTK; # Ñòðîèì ãëàâíûé îáúåêò
    ...
    $c->frm( -in => CTK::catfile($CTK::DATADIR,'in') );
    ...
    1;
    
 ïðèâåäåííîì ïðèìåðå ïðîèçîéäåò óäàëåíèå ñîäåðæèìîãî êàòàëîãà in â êàòàëîãå äàííûõ $CTK::DATADIR.

Èìïîðò çíà÷åíèÿ $CTK::DATADIR óïðàâëÿåòñÿ â ãëàâíîì ìîäóëå ìàøåé ïðîãðàììû èëè æå ïðè ÿâíîì âûçîâå, íàïðîèìåð:

    package my::mainlib;
    use CTK qw/ $DATADIR /
    my $c = new CTK; # Ñòðîèì ãëàâíûé îáúåêò
    ...
    $c->frm( -in => CTK::catfile($DATADIR,'in') );
    ...
    1;

VARIABLES, FUNCTIONS AND PROCEDURES

    Ãëîáàëüíûå ïåðåìåííûå

    $TM        - Ñ÷åò÷èê âðåìåíè
    $EXEDIR    - Äèðåêòîðèÿ ãäå ëåæèò âûçûâàåìûé ñêðèïò
    $DATADIR   - Äèðåêòîðèÿ äëÿ äàííûõ (ïîëüçîâàòåëüñêèé êàòàëîã)
    $CONFDIR   - Äèðåêòîðèÿ êîíôèãóðàöèè (ïîëüçîâàòåëüñêèé êàòàëîã)
    $CONFFILE  - Ãëàâíûé êîíôèãóðàöèîííûé ôàéë
    $LOGDIR    - Äèðåêòîðèÿ ãäå ëåæèò ëîãôàéë
    $LOGFILE   - Ñàì ôàéë ëîãà
    %OPT       - Ñïèñîê îïöèé êîìàíäíîé ñòðîêè
    @OPTSYSDEF - Ñïèñîê îïöèé ïî óìîë÷àíèþ, ìîæíî ïåðåîïðåäåëÿòü ïîëüçîâàòåëåì
    
    Áàçîâûå ôóíêöèè
    
    say        - Ôóíêöèÿ say êàê â perl 6
    debug      - Îòëàäêà - ýêðàí è ëîã åñëè óñòàíîâëåíû îïöèè -ld èëè -d
    tms        - Òàéìøòàìï. Ñòàíäàðòíûé âûâîä âðåìåíè
    exception  - Ïðîöåäóðà îáðàáîòêè èñêëþ÷åíèé
    testmode   - Ôóíêöèÿ âîçâðàùàåò ðåçóëüòàò òåñòîâîãî ðåæèìà, èñïîëüçóåòñÿ â áóëåâîì êîíòåêñòå
    debugmode  - Ôóíêöèÿ âîçâðàùàåò ðåçóëüòàò ðåæèìà îòëàäêè, èñïîëüçóåòñÿ â áóëåâîì è INT êîíòåêñòå
    logmode    - Ôóíêöèÿ âîçâðàùàåò ðåçóëüòàò ðåæèìà ëîãèðîâàíèÿ, èñïîëüçóåòñÿ â áóëåâîì êîíòåêñòå

TAGS
    
    ALL     - èìïîðòèðóþòñÿ âñå ãëîáàëüíûå ïåðåìåííûå è âñå áàçîâûå ôóíêöèè
    
    BASE    - èìïîðòèðóþòñÿ îñíîâíûå ãëîáàëüíûå ïåðåìåííûå è âñå áàçîâûå ôóíêöèè
    
    VARS    - èìïîðòèðóþòñÿ âñå ãëîáàëüíûå ïåðåìåííûå
    
    FUNC, FUNCS, SUB, SUBS - èìïîðòèðóþòñÿ âñå áàçîâûå ôóíêöèè

OPTIONS

    Îïöèè, èëè èíûìè ñëîìàìè ïàðû èìÿ-çíà÷åíèå ãëîáàëüíîãî õåøà %OPT íóæíû äëÿ âàøåé ïðîãðàììû,
    íî ñòîèò ó÷åñòü òîò íåìàëîâàæíûé ôàêò, ÷òî íåêîòîðûå èç íèõ èñïîëüçóåòñÿ è ñàìûì ìîäóëåì CTK
    è ïîòîìó ÿâëÿþòñÿ çàðåçåðâèðîâàííûìè. Ê òàêèì çàðåçåðâèðîâàííûì èìåíàì îïöèé îòíîñèòñÿ
    ñëåäóþùèé íàáîð îïöèé:

        debug
        log
        signature
        testmode

    Ýòè îïöèè îïðåäåëåíû â ñòàíäàðòíîì ìàññèâå @OPTSYSDEF

Ïàêåòíàÿ ðàáîòà ñ àðõèâàìè
    
    fextract - èçâëå÷åíèå ôàéëîâ èç àðõèâîâ ñ äâóìÿ ñïîñîáàìè: âíåøíèì è âíóòðåííèì.
    
    Âíåøíèé ñïîñîá ÿâëÿåòñÿ ïðèîðèòåòíûì, ò.ê. ñíèæàåò íàãðóçêó íà ñêðèïò. Âíåøíèé ñïîñîá áàçèðóåòñÿ
    íà ñèñòåìíîì âûçîâå òîé ïðîãðàììû, êîòîðàÿ îïðåäåëÿåòñÿ ïî ðàñøèðåíèþ ôàéëà àðõèâà.
    
    Âíóòðåííèé ñïîñîá áîëåå ðåñóðñîåìêèé è õîðîø â ñëó÷àå êîãäà èìååòñÿ ÷åòêîå ïðåäñòàâëåíèå êàêîé
    àðõèâ ïîäëåæèò îáðàáîòêå è íàñêîëüêî îí âåëèê.
    
    # Èçâëå÷åíèå ôàéëîâ âíåøíèì ñïîñîáîì
    $c->fextract(
            -in     => CTK::catfile($CTK::DATADIR,'in'),  # ïóòü äî ôàéëîâ àðõèâîâ
            -out    => CTK::catfile($CTK::DATADIR,'out'), # ïóòü ê ïàïêå äëÿ èçâëå÷åííûõ ôàéëîâ
            -method => 'ext',           # Óêàçàòåëü ÷òî ðå÷ü èäåò î âíåøíåì èçâëå÷åíèè, ìîæíî îïóñòèòü
            -list   => qr/rar/,         # Ìàñêà (ðóãóëÿðíîå âûðàæåíèå) íà îòáîð ôàéëîâ êàòàëîãà IN
            -arcdef => $config->{arc},  # Ñåêöèÿ îïðåäåëåíèé èç êîíôèãóðàöèîííîãî ôàéëà, Hashref
        );
        
    # Èçâëå÷åíèå ôàéëîâ âíóòðåííèì ñïîñîáîì
    $c->fextract(
            -in     => CTK::catfile($CTK::DATADIR,'in'),  # ïóòü äî ôàéëîâ àðõèâîâ
            -out    => CTK::catfile($CTK::DATADIR,'out'), # ïóòü ê ïàïêå äëÿ èçâëå÷åííûõ ôàéëîâ
            -method => 'zip',           # Óêàçàòåëü ÷òî ðå÷ü èäåò î âíåøíåì èçâëå÷åíèè, ìîæíî îïóñòèòü
            -list   => qr/zip/,         # Ìàñêà (ðóãóëÿðíîå âûðàæåíèå) íà îòáîð ôàéëîâ êàòàëîãà IN
            -arcdef => $config->{arc},  # Ñåêöèÿ îïðåäåëåíèé èç êîíôèãóðàöèîííîãî ôàéëà, Hashref
        );        
        
    fcompress - ñæàòèå ôàéëîâ, âíåøíèì ñïîñîáîì.
    
    # Ñæàòèå ôàéëà âíåøíèì ñïîñîáîì
    $c->fcompress(
            -in     => CTK::catfile($CTK::DATADIR,'in'),  # ïóòü äî ôàéëîâ äëÿ ñæàòèÿ
            -out    => CTK::catfile($CTK::DATADIR,'out','ttt.rar'), # Êîíå÷íîå èìÿ ôàéëà àðõèâà
            -list   => qr//,           # Ìàñêà (ðóãóëÿðíîå âûðàæåíèå) íà îòáîð ôàéëîâ êàòàëîãà IN
            -arcdef => $config->{arc}, # Ñåêöèÿ îïðåäåëåíèé èç êîíôèãóðàöèîííîãî ôàéëà, Hashref
        );
        
    Âíóòðåííèé ñïîñîá íå ðåàëèçîâàí ââèäó íåïðàêòè÷íîãî èñïîëüçîâàíèÿ.

Ïàêåòíàÿ ðàáîòà ñ ôàéëàìè

    fsplit - Ðàçðåçàíèå ôàéëîâ ïî ñòðîêàì. Èñïîëüçóåòñÿ òîëüêî òåêñòîâûé ðåæèì äîñòïóà.
    
    Äëÿ òîãî ÷òîáû î÷åíü áîëüøèå ôàéëû ðàçáèâàòü íà ñòðîêè, ñóùåñòâóåò ôóíêöèÿ fsplit, êîòîðàÿ 
    ñäåëàåò ýòî! 
    
    $c->fsplit(
            -in     => CTK::catfile($CTK::DATADIR,'in'),  # ïóòü äî ôàéëîâ äëÿ îáðàáîòêè
            -out    => CTK::catfile($CTK::DATADIR,'out'), # ïóòü äî èòîãîâûõ ôàéëîâ ïîñëå îáðàáîòêè
            -n      => 100, # êîëè÷åñòâî ñòðîê íà êîòîðûå íåîáõîäèìî ðàçáèâàòü ôàéëû 
            -format => '[FILENAME]_%03d.[FILEEXT]', # Ôîðìàò êàæäîãî èòîãîâîãî ôàéëà
            -list   => qr//, # Ìàñêà (ðóãóëÿðíîå âûðàæåíèå) íà îòáîð ôàéëîâ êàòàëîãà IN
        );

    fcopy, fcp - Êîïèðîâàíèå ôàéëîâ
    
    $c->fcopy(
            -in     => CTK::catfile($CTK::DATADIR,'in'),  # ïóòü äî ôàéëîâ äëÿ îáðàáîòêè
            -out    => CTK::catfile($CTK::DATADIR,'out'), # ïóòü äî èòîãîâûõ ôàéëîâ ïîñëå îáðàáîòêè
            -format => '[FILE].copy', # Ôîðìàò êàæäîãî èòîãîâîãî ôàéëà
            -list   => qr//, # Ìàñêà (ðóãóëÿðíîå âûðàæåíèå) íà îòáîð ôàéëîâ êàòàëîãà IN
        );
        
    fmove, fmv - Ïåðåíîñ ôàéëà
    
    $c->fmv(
            -in     => CTK::catfile($CTK::DATADIR,'in'),  # ïóòü äî ôàéëîâ äëÿ îáðàáîòêè
            -out    => CTK::catfile($CTK::DATADIR,'out'), # ïóòü äî èòîãîâûõ ôàéëîâ ïîñëå îáðàáîòêè
            -format => '[FILE].copy', # Ôîðìàò êàæäîãî èòîãîâîãî ôàéëà
            -list   => qr//, # Ìàñêà (ðóãóëÿðíîå âûðàæåíèå) íà îòáîð ôàéëîâ êàòàëîãà IN
        );

    fdelete, fdel, frm - Óäàëåíèå ôàéëà
    
    $c->frm(
            -in     => CTK::catfile($CTK::DATADIR,'in'), # ïóòü äî ôàéëîâ äëÿ îáðàáîòêè
            -list   => qr//, # Ìàñêà (ðóãóëÿðíîå âûðàæåíèå) íà îòáîð ôàéëîâ êàòàëîãà IN
        );

Ïàêåòíàÿ ðàáîòà ñ óäàëåííûìè ñåòåâûìè ðåñóðñàìè

    Äëÿ ðàáîòû ñ óäàëåííûìè ñèñòåìàìè òðåáóåòñÿ õýø êîííåêòà. Äëÿ ðàáîòû ñ FTP òàêîé õýø âûãëÿäèò êàê:
    
    my %ftpct = (
        ftphost     => '192.168.1.1',
        ftpuser     => 'login',
        ftppassword => 'password',
        ftpdir      => '~/activa', #activa
        #ftpattr     => {},
    );
    
    my %httpct = (
        method     => 'GET',
        url        => 'http://yandex.ru/robots.txt',
        #login      => 'login',
        #password   => 'password',
        #utf8       => 1,
    );
    
    my %uaopt = (
        agent                   => "Mozilla/4.0",
        max_redirect            => 10,
        requests_redirectable   => ['GET','HEAD','POST'],
        keep_alive              => 1,
        env_proxy               => 1,
    );
    
    Äàëåå ïî òåêñòó áóäåò èñïîëüçîâàòüñÿ îí
        
    fetch, get, download - Ïîëó÷åíèå ôàéëîâ, èõ ñêà÷êà
    
    $c->fetch(
            -connect  => {%ftpct},   # Äàííûå ñîåäèíåíèÿ
            -protocol => 'ftp',      # Ïðîòîêîë ðàáîòû, â ÷àñòíîñòè, FTP
            -dir      => $DATADIR,   # Äèðåêòîðèÿ (ïîëíûé ïóòü) ãäå áóäóò ëåæàòü ïðèíÿòûå ôàéëû
            -cmd      => 'copyuniq', # Êîìàíäà: copy / copyuniq / move / moveuniq
            -mode     => 'bin',      # Ðåæèì äîñòóïà ê ôàéëàì: ascii / binary (bin) 
            -list     => qr//,       # Ìàñêà (ðóãóëÿðíîå âûðàæåíèå) íà îòáîð ôàéëîâ èç èñòî÷íèêà
        );

    my $stat = $c->fetch(
            -connect  => {%httpct},  # Äàííûå ñîåäèíåíèÿ
            -uaopt    => {%uaopt},   # Îïöèè UserAgent (íåîáÿçàòåëüíû)
            -protocol => 'http',     # Ïðîòîêîë ðàáîòû, â ÷àñòíîñòè, HTTP, ìîæåò áûòü HTTPS
            -dir      => $DATADIR,   # Äèðåêòîðèÿ (ïîëíûé ïóòü) ãäå áóäóò ëåæàòü ïðèíÿòûå ôàéëû (íåîáÿçàòåëüíî)
            #-file    => '123.html', # Èìÿ ôàéëà (íåîáÿçàòåëüíî)
            #-uacode  => sub { },    # Èñïîëíÿåìûé êîä äëÿ îáýåêòà LWP::UserAgent (ïåðâûé ïàðàìåòð)
            #-reqcode => sub { },    # Èñïîëíÿåìûé êîä äëÿ îáýåêòà HTTP::Request (ïåðâûé ïàðàìåòð)
            #-rescode => sub { },    # Èñïîëíÿåìûé êîä äëÿ îáýåêòà HTTP::Response (ïåðâûé ïàðàìåòð)
        );
    debug("STATUS: ",$stat); 
    
    # Ïðîñòîé ñïîñîá ïîëó÷åíèÿ òåêñòîâûõ ñòðàíèö ñàéòîâ
    my $html = $c->fetch(
            -connect  => {
                    method     => 'GET',
                    url        => 'http://yandex.ru/robots.txt',
                },
            -protocol => 'http',
            #-utf8     => 1,
        );
    debug("DATA:\n\n",$html,"\n");

    Åñëè îïóñòèòü èìÿ ôàéëà è äèðåêòîðèþ, òî âûâîä áóäåò ïåðåäàí â ïåðåìåííóþ $stat.
    
    ÂÀÆÍÎÅ ÇÀÌÅ×ÀÍÈÅ!!! Ýòîò ïóòü ïðèåìà (ñêà÷èâàíèÿ) ôàéëîâ ðàáîòàåò òîëüêî ñ íåáîëüøèìè ôàéëàìè,
    äëÿ çàãðóçêè áîëüøèõ îáúåìîâ ëó÷èì ðåøåíèåì áóäåò èñïîëüçîâàíèå ñòîðîííèõ ïðîãðàìì, òàêèõ êàê 
    wget, fetch, lwp-download è äðóãèõ àíàëîãîâ.
    
    Íàãëÿäíûì ïðèìåðîì èñïîëüçîâàíèÿ uacode, reqcode è rescode, áóäåò âûâîä çàãîëîâêîâ ñë. îáðàçîì:
    
        -rescode => sub { debug(CTK::Net::_debug_http(@_))  },
        
    Ôóíêöèÿ CTK::Net::_debug_http âîçâðàùàåò ïîäðîáíóþ èíôîðìàöèþ î çàïðîñå.
        
    Êîìàíäû áûâàþò:
    
    copy        - Êîïèðîâàíèå ôàéëà
    copyuniq    - Êîïèðîâàíèå òîëüêî óíèêàëüíûõ ôàéëîâ
    move        - Ïåðåìåùåíèå ôàéëà
    moveuniq    - Ïåðåìåùåíèå òîëüêî óíèêàëüíûõ ôàéëîâ
    
    store, put, upload - Îòïðàâêà ôàéëîâ, èõ çàãðóçêà
    
    $c->store(
            -connect  => {%ftpct},   # Äàííûå ñîåäèíåíèÿ
            -protocol => 'ftp',      # Ïðîòîêîë ðàáîòû, â ÷àñòíîñòè, FTP
            -dir      => $DATADIR,   # Äèðåêòîðèÿ (ïîëíûé ïóòü) ãäå ëåæàò ôàéëû äëÿ îòïðàâêè
            -cmd      => 'copyuniq', # Êîìàíäà: copy / copyuniq / move / moveuniq
            -mode     => 'bin',      # Ðåæèì äîñòóïà ê ôàéëàì: ascii / binary (bin) 
            -file     => 'sg1.bat',  # Ñïèñîê èëè èìÿ ôàéëîâ èëè ìàñêà îòáîðà
        );

Ðàáîòà ñ áàçàìè äàííûõ è õðàíèëèùàìè

    Äëÿ ðàáîòû íåîáõîäèìî ïîäêëþ÷èòü ìîäóëü CTK::DBI â òîì ïàêåòå, îòêóäà áóäóò ïðîèçâîäèòüñÿ âûçîâû.
        
    # Ñîåäèíåíèå ñ ÁÄ mysql
    my $oracle = new CTK::DBI(
            -dsn  => 'DBI:mysql:database=mvcskel;host=192.168.100.1',
            -user => 'login',
            -pass => 'password',
        );
    debug($oracle->field("select sysdate() from dual"));
    
    # Ñîåäèíåíèå ñ ÁÄ Oracle
    if (testmode) {
        my $oracle = new CTK::DBI(
            -dsn  => $config->{oracle}{prodt}{dsn},
            -user => $config->{oracle}{prodt}{user},
            -pass => $config->{oracle}{prodt}{password},
        );
        debug($oracle->field("select sysdate from dual"));
    }

Îòïðàâêà ïèñåì
    
    my $send = CTK::sendmail(
        -to         => (testmode() ? $config->{sendmail}{testmail} : $config->{sendmail}{to}),
        -cc         => $config->{sendmail}{cc},
        -from       => $config->{sendmail}{from},
        -type       => $config->{sendmail}{type},
        -smtp       => $config->{sendmail}{smtp},
        -subject    => 'ìîÿ òåìà',
        -message    => 'ìîå ñîîáùåíèå',
        -attach => [ 
                {Type=>'text/plain', Path=>$CTK::LOGFILE, Filename=>'log.txt', Disposition=>'attachment',},
                {Type=>'text/plain', Data=>'document 1 content', Filename=>'doc1.txt', Disposition=>'attachment',},
                {Type=>'text/plain', Data=>'document 2 content', Filename=>'doc2.txt', Disposition=>'attachment',},
            ],
    );
    debug($send ? 'ïèñüìî óøëî :)' : 'ïèñüìî ÍÅ óøëî :(');

Øèôðîâàíèå è çàùèíû, êðèïòîãðàôèÿ

    gpg_decript - Äåøèôðîâàíèå ôàéëîâ ñ ïîìîùüþ óòèëèòû GPG (GnuPG)

    Ñàéò ïðîåêòà: http://www.gnupg.org/ (GPG4Win - http://gpg4win.org/)
    
    Äåøèôðîâàíèå âåäåòñÿ ïî óæå óñòàíîâëåííûì ôàéëàì êëþ÷åé
    
    $c->gpg_decript(
            -in      => CTK::catfile($DATADIR,'in','test.txt.asc'), # ïóòü äî ôàéëîâ äëÿ ðàøèôðîâêè
            -out     => CTK::catfile($DATADIR,'out','test.txt'),    # ïóòü äî ôàéëà ïîñëå îáðàáîòêè
            -gpghome => '', # ÇÀÐÅÇÅÐÂÈÐÎÂÀÍÎ
            -certdir => '', # ïóòü äî êàòàëîãà ñ ñåðòèôèêàòàìè. Ïî óìîë÷àíèþ êàòàëîã ./data/cert
            -pubkey  => '', # Ïóòü äî ôàéëà ïóáëè÷íîãî (îòêðûòîãî) êëþ÷à. Ïî óìîë÷àíèþ ./data/cert/public.key
            -privkey => '', # Ïóòü äî ôàéëà ïðèâàòíîãî (çàêðûòîãî) êëþ÷à. Ïî óìîë÷àíèþ ./data/cert/private.key
            -pass    => '', # Ïàðîëü äëÿ çàêðûòîãî êëþ÷à. Ïî óìîë÷àíèþ - ñïðîñèò
        );

Ðàáîòà ñ êîìàíäíîé ñòðîêîé

    cli_prompt - Âûçîâ êîìàíäíîé ñòðîêè, çàïðîñ íà ââîä ñòðîêîéâîé ïåðåìåííîé
    
    my $v = $c->cli_prompt('Your name:', 'anonymous');
    debug( "Your name: $v" );

    Ïåðâûì ïàðàìåòðîì óêàçûâàåòñÿ ïðèãëàøåíèå, âòîðûì - çíà÷åíèå ïî óìîë÷àíèþ
    
    cli_prompt3 - Âûçîâ cli_prompt ïîñëåäîâàòåëüíî 3 ðàçà äëÿ öåëåé êîððåêòíîãî ââåäåíèÿ çíà÷åíèÿ
    
    my $v = $c->cli_prompt3('Your name:');
    debug( "Your name: $v" );
    
    Ïåðâûì ïàðàìåòðîì óêàçûâàåòñÿ ïðèãëàøåíèå, âòîðûì - çíà÷åíèå ïî óìîë÷àíèþ
    
    cli_select - Âûçîâ ñïñèêà äëÿ âûáîðà çíà÷åíèÿ èç íåãî. Èñïîëüçóåòñÿ òàæå êîìàíäíàÿ ñòðîêà íî 
    ñ òîé ëèøü ðàçíèöåé ÷òî îæèäàåòñÿ îïðåäåëåííîå çíà÷åíèå èç ïðåäëîæåííîãî ñïèñêà ýòèõ çíà÷åíèé
    
    my $v = $c->cli_select('Your select:',[qw/foo bar baz/],'bar');
    debug( "Your select: $v" );
    
    Ïåðâûì ïàðàìåòðîì óêàçûâàåòñÿ ñòðîêà ïðèãëàøåíèÿ íà ââîä çíà÷åíèÿ, âòîðûì ïàðàìåòðîì - ññûëêà íà
    ìàññèâ ñîäåðæàùèé ñïèñîê çíà÷åíèé è òðåòèé ïàðàìåòð - çíà÷åíèå ïî óìîë÷àíèþ.

    cli_select3 - Âûçîâ cli_select ïîñëåäîâàòåëüíî 3 ðàçà äëÿ öåëåé êîððåêòíîãî ââåäåíèÿ çíà÷åíèÿ
    
    my $v = $c->cli_select3('Your select:',[qw/foo bar baz/],'foo');
    debug( "Your select: $v" );
    
    Ïåðâûì ïàðàìåòðîì óêàçûâàåòñÿ ñòðîêà ïðèãëàøåíèÿ íà ââîä çíà÷åíèÿ, âòîðûì ïàðàìåòðîì - ññûëêà íà
    ìàññèâ ñîäåðæàùèé ñïèñîê çíà÷åíèé è òðåòèé ïàðàìåòð - çíà÷åíèå ïî óìîë÷àíèþ.


EXAMPLES

Ñòàòüÿ ïî Moose: http://ni-al.ru/index.php/Perl::Moose::Conept

Ïîëó÷åíèå ñïèñêà âñåõ óòèëèòàðíûõ ýêñïîðòèðîâàííûõ ôóíêöèé

perl -MCTK::Util -e "print join qq/\n/, sort {$a cmp $b} @{$CTK::Util::EXPORT_TAGS{ATOM}}" | gclip

ENVIRONMENT
    No environment variables are used.

BUGS
    Please report them.

SEE ALSO
    "Perl", ...

DIAGNOSTICS
    The usual warnings if it cannot read or write the files involved.

HISTORY
    See CHANGES file

TODO
    See TODO file

LICENSE
    See LICENSE file

THANKS
    Thanks to me for ...

AUTHOR
    Serz Minus (Lepenkov Sergey) http://serzik.ru <minus@mail333.com>.

COPYRIGHTS
    Copyright (C) 1998-2013 D&D Corporation. All Rights Reserved