Perl и JavaScript очень похожи.
Массивы и хэши JavaScript по своей записи почти идентичны ссылкам на массивы и ссылкам на хэши языка Perl. Единственное — в качестве разделителя => выступает разделитель :.
Сравните Perl
и JavaScript
Два важных отличия:
* Перечисление элементов хэша в JavaScript не должно завершаться запятой (это приведёт к ошибке). Для массива допустимо определение var a = [1,2,45,67,];
* Для переменных JavaScript нет понятия контекст и префикс. $ — это просто стандартный разрешённый символ для имени переменной. В рабочем коде знак $ лучше использовать только для обращения к соотв. функциям jQuery/Prototype.
Скалярные значения в JavaScript чуть более типизированы (численный, строковый и булевый типы разделены), но это скриптовый язык, и в переменной тоже может находится что угодно.
Важное замечание: Внутренний формат строк JavaScript- Unicode. Все встроенные функции эскапирования JavaScript знают только кодировку utf-8. Рекомендую для Ajax-взаимодействия, соответственно, выбирать только кодировку utf-8.
Функции в JavaScript и подпрограммы в Perl очень похожи. И те, и другие позволяют оперировать замыканиями. И те и другие — просто переменные, с возможностью альтернативной формы записи. Внутренняя функция оперирует переменными внешней функции.
Сравните Perl
и JavaScript
Небольшое отличие: при такой форме определения функции в JavaScript после закрывающей фигурной скобки точка с запятой не обязательна. Но я рекомендую всегда использовать именно такую форму определения функций, и включать точку с запятой (для корректной работы packer).
Важное отличие: В JavaScript функции, равно как и массивы, и хэши — являются частными случаями объектов. Все объекты JavaScript — фактически хэши. Запись a['b'] идентична записи a.b (доступен оператор проверки наличия ключа 'b' in a).
Пакеты Perl очень удобно поддерживаются в JavaScript через функции-пространства имён.
Perl:
JavaScript:
Объектная модель в JavaScript может быть поддержана множеством способов, в рамках семинара я рассказал лишь об одном из них — это формирование объекта функцией-конструктором.
После небольшого введения в jQuery был представлен и пример плагина:
Используем:
Хорошая новость — регулярные выражения поддерживаются языком JavaScript. Плохая новость — использовать их немного сложнее.
Perl:
JavaScript:
Perl:
JavaScript:
Один из читателей вспомнил замечательную статью Дмитрия Котерова: Маленькие хитрости JavaScript, или пишем скрипты по-новому.
Ещё рекомендую RSDN: введение в jQuery.
P.S.:
В следующей статье постараюсь рассказать о лёгком и удобном RPC между JavaScript и PHP/Perl и .NET.
P.P.S.:
Так получилось, что в своей компании я являюсь носителем знаний в основном по технологиям клиентской стороны (DHTML, JavaScript, jQuery, Ajax), в то же время обладая некоторыми базовыми навыками по Perl.
Тем не менее, знание клиентских технологий сейчас очень важны для большинства Perl-программистов, которые ранее использовали просто генерацию страниц по шаблонам.
В результате чего и родилась эта статья (первоначально — семинар).
Элементарное
Массивы и хэши JavaScript по своей записи почти идентичны ссылкам на массивы и ссылкам на хэши языка Perl. Единственное — в качестве разделителя => выступает разделитель :.
Сравните Perl
my $a = [ 1, 4, 67, { x => 67, y => 43} ];
и JavaScript
var $a = [ 1, 4, 67, { x: 67, y: 43} ];
Два важных отличия:
* Перечисление элементов хэша в JavaScript не должно завершаться запятой (это приведёт к ошибке). Для массива допустимо определение var a = [1,2,45,67,];
* Для переменных JavaScript нет понятия контекст и префикс. $ — это просто стандартный разрешённый символ для имени переменной. В рабочем коде знак $ лучше использовать только для обращения к соотв. функциям jQuery/Prototype.
Скалярные значения в JavaScript чуть более типизированы (численный, строковый и булевый типы разделены), но это скриптовый язык, и в переменной тоже может находится что угодно.
Важное замечание: Внутренний формат строк JavaScript- Unicode. Все встроенные функции эскапирования JavaScript знают только кодировку utf-8. Рекомендую для Ajax-взаимодействия, соответственно, выбирать только кодировку utf-8.
Функции в JavaScript и подпрограммы в Perl очень похожи. И те, и другие позволяют оперировать замыканиями. И те и другие — просто переменные, с возможностью альтернативной формы записи. Внутренняя функция оперирует переменными внешней функции.
Сравните Perl
my $f = sub
{
my ($a, $b) = @_;
return $a * $b;
};
и JavaScript
var $f = function($a, $b)
{
return $a * $b;
};
Небольшое отличие: при такой форме определения функции в JavaScript после закрывающей фигурной скобки точка с запятой не обязательна. Но я рекомендую всегда использовать именно такую форму определения функций, и включать точку с запятой (для корректной работы packer).
Важное отличие: В JavaScript функции, равно как и массивы, и хэши — являются частными случаями объектов. Все объекты JavaScript — фактически хэши. Запись a['b'] идентична записи a.b (доступен оператор проверки наличия ключа 'b' in a).
Пространства имён и классы
Пакеты Perl очень удобно поддерживаются в JavaScript через функции-пространства имён.
Perl:
package Something;
sub x
{
}
JavaScript:
window.Something = function()
{
var x = function()
{
};
};
window.Something.x = x; // экспорт имён
Объектная модель в JavaScript может быть поддержана множеством способов, в рамках семинара я рассказал лишь об одном из них — это формирование объекта функцией-конструктором.
После небольшого введения в jQuery был представлен и пример плагина:
(function() // анонимное пространство имён.
{
$.fn.helloWorldControl = function()
{
this.empty();
// Заметьте, мы формируем содержание и присваиваем его отдельной переменной.
// Теперь мы сможем им манипулировать, когда орган управления станет более
// функциональным.
var div = $('Hello, world').appendTo(this);
};
})();
Используем:
$('#example').helloWorldControl();
Регулярные выражения
Хорошая новость — регулярные выражения поддерживаются языком JavaScript. Плохая новость — использовать их немного сложнее.
Perl:
if ($v =~ m/$began/i)
{
}
JavaScript:
if (v.match(/$began/i))
{
}
Perl:
$v =~ s/$began/begin/i;
JavaScript:
v.replace(/$began/i, 'begin');
Один из читателей вспомнил замечательную статью Дмитрия Котерова: Маленькие хитрости JavaScript, или пишем скрипты по-новому.
Ещё рекомендую RSDN: введение в jQuery.
P.S.:
В следующей статье постараюсь рассказать о лёгком и удобном RPC между JavaScript и PHP/Perl и .NET.
P.P.S.:
Так получилось, что в своей компании я являюсь носителем знаний в основном по технологиям клиентской стороны (DHTML, JavaScript, jQuery, Ajax), в то же время обладая некоторыми базовыми навыками по Perl.
Тем не менее, знание клиентских технологий сейчас очень важны для большинства Perl-программистов, которые ранее использовали просто генерацию страниц по шаблонам.
В результате чего и родилась эта статья (первоначально — семинар).