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