$Id: README 200 2017-05-01 08:51:48Z minus $ ############################################################################## # # # # # THIS FILE DESCRIBES PRINCIPLES WORKING WITH CTKlib # # # # NOTE: THE FILE IS WRITTEN IN RUSSIAN. WORK IS UNDERWAY TO TRANSLATE IT # # INTO ENGLISH. IN THE NEXT RELEASE, EVERYTHING WILL CHANGE. # # THANK FOR UNDERSTANDING. # # # ############################################################################## NAME CTKlib - Command-line ToolKit library (CTK). Command line interface (CLI) VERSION Version 1.18 SYNOPSIS use CTK; use CTK qw/ ...TAGS... / use CTK qw/ ...VARIABLES, FUNCTIONS AND PROCEDURES... / ABSTRACT Проект CTKlib Ñодержит неÑколько библиотек работы Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ð°Ð¼Ð¸ обÑлуживающие командную Ñтроку SVN: http://svn.serzik.com/CTKlib/trunk svn co http://svn.serzik.com/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 Sergey Lepenkov (Serz Minus) http://www.serzik.com <minus@mail333.com>. COPYRIGHTS Copyright (C) 1998-2017 D&D Corporation. All Rights Reserved