|
|
| version 1.76, 2002/08/20 08:18:59 | version 1.94, 2002/10/23 09:32:16 |
|---|---|
| Line 5 Xне сделано, видимо, не будет сделано | Line 5 Xне сделано, видимо, не будет сделано |
| операторы | операторы |
| !^eval(выражение)[формат] выражение, кроме обычных функций:: | !^eval(выражение)[формат] выражение, кроме обычных функций:: |
| !допустимы #комментарии | |
| работают до конца строки или закрывающейся круглой скобки | |
| внутри комментария допустимы вложенные круглые скобки | |
| !из неочевидных операторов: | !из неочевидных операторов: |
| # побитный xor | !| побитный xor |
| ## логический xor | !|| логический xor |
| ~ побитное отрицание | ~ побитное отрицание |
| \ целочисленное деление 10\3=3 | \ целочисленное деление 10\3=3 |
| !def для проверки defined, | !def для проверки defined, |
| пустая строка не defined | пустая строка не defined |
| пустая таблица не defined | пустая таблица не defined |
| пустой hash не defined | пустой hash не defined |
| ^if(method $hash.delete){yes} | |
| !eq ne lt gt le ge для сравнения строк, | !eq ne lt gt le ge для сравнения строк, |
| !in "/dir/" для проверки | !in "/dir/" для проверки |
| ["внутри не допустимы, если надо сравнить со сложным, | ["внутри не допустимы, если надо сравнить со сложным, |
| Line 27 Xне сделано, видимо, не будет сделано | Line 31 Xне сделано, видимо, не будет сделано |
| !числовой литерал бывает 0xABC | !числовой литерал бывает 0xABC |
| !приоритеты: | !приоритеты: |
| /* logical */ | /* logical */ |
| %left "##" | %left "!||" |
| %left "||" | %left "||" |
| %left "&&" | %left "&&" |
| %left '<' '>' "<=" ">=" "lt" "gt" "le" "ge" | %left '<' '>' "<=" ">=" "lt" "gt" "le" "ge" |
| %left "==" "!=" "eq" "ne" | %left "==" "!=" "eq" "ne" |
| %left "is" "def" "in" "-f" "-d" | %left "is" "def" "in" "-f" "-d" |
| %left '!' | %left '!' |
| условие ? когдаДа: когдаНет | |
| /* bitwise */ | /* bitwise */ |
| %left '#' | %left '!|' |
| %left '|' | %left '|' |
| %left '&' | %left '&' |
| %left '~' | %left '~' |
| Line 45 Xне сделано, видимо, не будет сделано | Line 50 Xне сделано, видимо, не будет сделано |
| %left '-' '+' | %left '-' '+' |
| %left '*' '/' '%' '\\' | %left '*' '/' '%' '\\' |
| %left NEG /* negation: unary - */ | %left NEG /* negation: unary - */ |
| !^if(условие){когда да}{когда нет} | !^if(условие){когда да}{когда нет} |
| !^switch[значение]{^case[вариант1[;вариант2...]]{действие}^case[DEFAULT]{действие по умолчанию}} | !^switch[значение]{^case[вариант1[;вариант2...]]{действие}^case[DEFAULT]{действие по умолчанию}} |
| !^while(условие){тело} | !^while(условие){тело} |
| Line 85 Xне сделано, видимо, не будет сделано | Line 92 Xне сделано, видимо, не будет сделано |
| default as-is | default as-is |
| !^taint[[lang]][код] | !^taint[[lang]][код] |
| default "just tainted, language unknown" | default "just tainted, language unknown" |
| !^process{строка, которая будет process-ed, как код} | !^process[[$caller.CLASS|$object|$КЛАСС:CLASS]]{строка, которая будет process-ed, как код} |
| по умолчанию, методы компилируются в $self [в случае оператора, $self=$MAIN:CLASS] | |
| !^connect[protocol://строка соединения]]{код с ^sql[...]-ями} | !^connect[protocol://строка соединения]]{код с ^sql[...]-ями} |
| !mysql://user:pass@{host[:port]|[/unix/socket]}/database? | !mysql://user:pass@{host[:port]|[/unix/socket]}/database? |
| charset=cp1251_koi8& | charset=cp1251_koi8& |
| Line 160 odbc c:\drives\y\parser3project\odbc\ | Line 168 odbc c:\drives\y\parser3project\odbc\ |
| !и есть исключение: ^untaint[html]{код} не оптимизируется | !и есть исключение: ^untaint[html]{код} не оптимизируется |
| Xбезотностительно флажка | Xбезотностительно флажка |
| !у всех макросов есть локальная переменная $result, если в неё что положить, | !у всех методов есть локальная переменная $result, если в неё что положить, |
| !то _это_ будет результатом макроса, а не его тело | !то _это_ будет результатом макроса, а не его тело |
| !у всех методов есть локальная переменная $caller, в ней лежит родительский stack frame, | |
| !если туда записать | |
| !use(^use или @USE) ищет файл... | !use(^use или @USE) ищет файл... |
| !1. ...если путь начинается с /, то считается, что это путь от корня веб пространства | !1. ...если путь начинается с /, то считается, что это путь от корня веб пространства |
| Line 216 odbc c:\drives\y\parser3project\odbc\ | Line 226 odbc c:\drives\y\parser3project\odbc\ |
| !void | !void |
| !^имя.length[] | !^имя.length[] |
| 0 | 0 |
| !^имя.pos[...] | |
| -1 | |
| !^имя.int[] (default) | !^имя.int[] (default) |
| 0 или default | 0 или default |
| !^имя.double[] (default) | !^имя.double[] (default) |
| Line 245 odbc c:\drives\y\parser3project\odbc\ | Line 257 odbc c:\drives\y\parser3project\odbc\ |
| пример: | пример: |
| ^if(def $form:name) не пуста? | ^if(def $form:name) не пуста? |
| ^if($user.isAlive) истина? [автопреобразование к числу, не ноль?] | ^if($user.isAlive) истина? [автопреобразование к числу, не ноль?] |
| !^string::sql{query}[[$.limit(2) $.offset(4) $.default{n/a}]] | !^string::sql{query}[[$.limit(1) $.offset(4) $.default{n/a}]] |
| результат запроса должен быть один столбец/одна строка | результат запроса должен быть один столбец/одна строка |
| !^имя.int[] .int(default) целочисленное значение строки. | !^имя.int[] .int(default) целочисленное значение строки. |
| если ломается преобразование, берётся default | если ломается преобразование, берётся default |
| Line 262 odbc c:\drives\y\parser3project\odbc\ | Line 274 odbc c:\drives\y\parser3project\odbc\ |
| !^строка.match[шаблон][опции поиска]{замена} | !^строка.match[шаблон][опции поиска]{замена} |
| опции поиска+= | опции поиска+= |
| g заменить все вхождения, а не одно | g заменить все вхождения, а не одно |
| !^строка.split[разделитель][[lrhv]] | |
| l слева направо [default] | |
| r справа налево | |
| h nameless таблица | |
| v таблица из столбца piece [default] | |
| !^строка.{l|r}split[разделитель] таблица из столбца $piece | !^строка.{l|r}split[разделитель] таблица из столбца $piece |
| оставлен для совместимости | |
| !^строка.upper|lower[] | !^строка.upper|lower[] |
| X^строка.truncate(предел терпенья) стиль :( | X^строка.truncate(предел терпенья) стиль :( |
| !^строка.length[] | !^строка.length[] |
| Line 305 odbc c:\drives\y\parser3project\odbc\ | Line 323 odbc c:\drives\y\parser3project\odbc\ |
| X^таблица.remove(position[;count]) - стирает запись | X^таблица.remove(position[;count]) - стирает запись |
| из текущей позиции [стирает запись из конкретной позиции] | из текущей позиции [стирает запись из конкретной позиции] |
| [стирает count записей] | [стирает count записей] |
| !^таблица.join[таблица][$.limit(1) $.offset(5) $.offset[cur]] - добавляет записи из таблицы. | !^таблица.join[таблица][$.limit(1) $.offset(5) $.offset[cur]] - добавляет записи из таблицы. |
| таблицы должны иметь одинаковую структуру. | таблицы должны иметь одинаковую структуру. |
| !^таблица.flip[] выдаёт транспонированную, надо куда-то сложить, потом пользовать | !^таблица.flip[] выдаёт транспонированную, надо куда-то сложить, потом пользовать |
| !^таблица.locate[поле;значение] передвигает текущую строку, если найдёт. выдаёт bool | !^таблица.locate[поле;значение] передвигает текущую строку, если найдёт. выдаёт bool |
| !^таблица.locate(логическое выражение) передвигает текущую строку, если найдёт. выдаёт bool | !^таблица.locate(логическое выражение) передвигает текущую строку, если найдёт. выдаёт bool |
| !^таблица.hash[поле, что будет ключом][[поле значений|table поля значений]]+ | !^таблица.hash{[поле]|{код}|(выражение)}[[поле значений|table поля значений]][[$.distinct(1)]] |
| значением $hash.ключ будет hash в котором поля значений будут ключами | значением $hash.ключ будет hash в котором поля значений будут ключами |
| поля значений могут быть не указаны, тогда ими будут все столбцы, включая ключевой | поля значений могут быть не указаны, тогда ими будут все столбцы, включая ключевой |
| !^таблица.columns[]+ таблица из одного столбца $column | !^таблица.columns[]+ таблица из одного столбца $column |
| !$отобранное[^таблица.select(выражение)] = таблица из тех же столбцов и строк, у которых условие совпало | !$отобранное[^таблица.select(выражение)] = таблица из тех же столбцов и строк, у которых условие совпало |
| $adults[^man.select($man.age>=18)] | $adults[^man.select($man.age>=18)] |
| ^таблица.color[цвет1;цвет2] | ^таблица.color[цвет1;цвет2] |
| !hash | !hash |
| Line 336 odbc c:\drives\y\parser3project\odbc\ | Line 354 odbc c:\drives\y\parser3project\odbc\ |
| !^a.intersection[b] = пересечение | !^a.intersection[b] = пересечение |
| значения a | значения a |
| !^a.intersects[b] = bool | !^a.intersects[b] = bool |
| !^hash::sql{запрос}[[$.limit(2) $.offset(4) todo:$.default{$.field[]...}]] | !^hash::sql{запрос}[[$.distinct(1) $.limit(2) $.offset(4) todo:$.default{$.field[]...}]] |
| получается hash(ключи=значения первая колонка ответа) | получается hash(ключи=значения первая колонка ответа) |
| of hash(ключи=названия остальных колонкок ответа) | of hash(ключи=названия остальных колонкок ответа) |
| !^hash._keys[]+ таблица из одного столбца $key | !^hash._keys[]+ таблица из одного столбца $key |
| Line 347 odbc c:\drives\y\parser3project\odbc\ | Line 365 odbc c:\drives\y\parser3project\odbc\ |
| !form | !form |
| [берётся первый элемент из одноимённых из GET, потом первый из POST] | [берётся первый элемент из одноимённых из GET, потом первый из POST] |
| !$form:поле = string/file | !$form:поле = string/file |
| !$form:nameless = поле со значением поля без имени "?value&...", "...&value&...", "...&value" | |
| !$form:qtail = строка со значением текста после второго "?xxxxx", если там не было ',' [imap] | |
| !$form:fields = hash со всеми полями формы | !$form:fields = hash со всеми полями формы |
| !$form:tables.поле = table с одним столбцом "field" со значениями "поля" | !$form:tables.поле = table с одним столбцом "field" со значениями "поля" |
| !$form:imap = хэш с ключами 'x' и 'y' | |
| со значением ?1,2 приписки при использовании server-site image map | |
| !env | !env |
| !$env:переменная | !$env:переменная |
| Line 612 Xhashfile | Line 634 Xhashfile |
| !^file:basename[/a/some.tar.gz]=some.tar.gz | !^file:basename[/a/some.tar.gz]=some.tar.gz |
| !^file:justname[/a/some.tar.gz]=some.tar | !^file:justname[/a/some.tar.gz]=some.tar |
| !^file:justext[/a/some.tar.gz]=gz | !^file:justext[/a/some.tar.gz]=gz |
| !/some/page.html: ^file:fullpath[a.gif] => /some/a.gif | |
| math | math |
| !$math:PI | !$math:PI |
| Line 819 xdoc(xnode) | Line 843 xdoc(xnode) |
| does not support data | does not support data |
| NO_MODIFICATION_ALLOWED_ERR | NO_MODIFICATION_ALLOWED_ERR |
| If an attempt is made to modify an | If an attempt is made to modify an |
| object where modifications are not | object where modifications are not |
| allowed | allowed |
| NOT_FOUND_ERR | NOT_FOUND_ERR |
| If an attempt was made to reference a | If an attempt was made to reference a |
| Line 869 xdoc(xnode) | Line 893 xdoc(xnode) |
| !ixrss integral shared text memory size | !ixrss integral shared text memory size |
| !idrss integral unshared data size | !idrss integral unshared data size |
| !isrss integral unshared stack size | !isrss integral unshared stack size |
| !tv_sec | |
| !tv_usec | |
| $s[$status:rusage] | |
| ^s.tv_sec.format[%.0f].^s.tv_usec.format[%06.0f] | |
| !DATA::=string | file | !DATA::=string | file |