Perl
Розширення PHP Perl був реалізований, щоб використання Perl код в PHP. Це оболонка, яка вбудовує інтерпретатор Perl і перетворює дані в Perl PHP і назад. Це оболонка, яка вбудовує інтерпретатор Perl і перетворює дані в Perl PHP і назад. На момент написання дає лише один спосіб-інтерфейс PHP на Perl, але в майбутньому вона може бути продовжена здійснювати повний інтерфейс в обох напрямках. На момент написання дає лише один спосіб-інтерфейс PHP на Perl, але в майбутньому вона може бути продовжена здійснювати повний інтерфейс в обох напрямках. Розширення Perl дозволяє програмістові робити наступні зі сценаріїв PHP: Розширення Perl дозволяє програмістові робити наступні зі сценаріїв PHP:
* Завантажити та виконати файли Perl завантажити і виконати файли Perl * Оцінки Perl код оцінки код Perl * Доступ Perl змінних змінних доступу Perl * Виклику Perl функції виклику функцій Perl * Примірник Perl об'єктів екземплярів об'єктів Perl * Доступу до властивостей об'єктів Perl доступу до властивостей об'єктів Perl * Виклику методів об'єктів Perl виклику методів об'єктів Perl
Всі ці функції доступні через єдиний клас API називається Perl. Всі ці функції доступні через єдиний клас API називається Perl.
Perl розширенням PHP доступний з сайту PECL адресою http://pecl.php.net/package/perl. Perl розширенням PHP можна ознайомитися з веб-сайту PECL на http://pecl.php.net/package/perl. Останню розробку версії можна отримати за допомогою наступної команди CVS: Останню розробку версії можна отримати за допомогою наступної команди CVS: $ CVS-D: PServer: cvs.php.net: / сховище спільно PECL / Perl
Якщо у вас є повний Perl установки, воно буде працювати з нею. Якщо у вас є повний Perl установки, воно буде працювати з нею. Якщо у вас немає Perl на борту, ви можете спілкуватися з Perl інтерпретатор PHP шляхом, поставивши копію perl58.so perl58.dll або десь PHP можна знайти (у папці PHP або у системний шлях). Якщо у вас немає на борту Perl, ви можете спілкуватися з Perl інтерпретатор PHP шляхом, поставивши копію perl58.so perl58.dll або десь PHP можна знайти (у папці PHP або в системний шлях). Перекладач в Perl PHP Перекладач в Perl PHP
Щоб отримати доступ до Perl перекладач з PHP, ви повинні спочатку створити екземпляр класу Perl. Щоб отримати доступ до Perl перекладач з PHP, ви повинні спочатку створити екземпляр класу Perl. Його конструктор може отримувати кілька параметрів, але ми їх кладемо в цій точці. Його конструктор може отримувати кілька параметрів, але ми їх кладемо в цій точці. Вони необхідні для роботи з Perl об'єктів, але не для роботи з перекладачем себе. Вони необхідні для роботи з Perl об'єктів, але не для роботи з перекладачем себе. $ Perl = новий Perl ();
Цей рядок коду створює екземпляр Perl перекладача. Цей рядок коду створює екземпляр Perl перекладача. Можна створити кілька примірників перекладача, але все вони будуть використовувати ті ж одна всередині країни, так що весь код та змінні будуть загальними для всіх випадків. Можна створити кілька примірників перекладача, але всі вони будуть використовувати ті ж одна всередині країни, так що весь код і змінні будуть загальними для всіх випадків. Об'єкт $ Perl можуть бути використані для виконання зовнішніх файли Perl, оцінити вбудований код Perl, доступ Perl змінні і функції виклику Perl. Об'єкт $ Perl можуть бути використані для виконання зовнішніх файли Perl, оцінити вбудований код Perl, доступ Perl змінні і функції виклику Perl.
Зовнішні Perl файли можуть бути завантажені використанням Perl:: вимагає () метод. Зовнішні Perl файли можуть бути завантажені використанням Perl:: вимагає () метод. Погляньте на наступний приклад: Погляньте на наступний приклад: Приклад 1 (test1.pl) Приклад 1 (test1.pl) друк "Привіт з Perl!" Приклад 1 (test1.php) Приклад 1 (test1.php) <? PHP
друк "Привіт з PHP!"; $ Perl = новий Perl (); $ Perl -> вимагає ("test1.pl"); друк "Bye!";
?>
У цьому прикладі Perl заходів рядок безпосередньо у вихідний потік, PHP, але в деяких випадках вам потрібно буде взяти вихідний, як струна, і обробити його за допомогою коду PHP. У цьому прикладі Perl заходів рядок безпосередньо у вихідний потік, PHP, але в деяких випадках вам потрібно буде взяти вихідний, як струна, і обробити його за допомогою коду PHP. Це може бути зроблено з використанням даних, PHP буферизації API: Це може бути зроблено з використанням даних, PHP буферизації API: Приклад 2 (test2.php) Приклад 2 (test2.php) <? PHP
ob_start (); $ Perl = новий Perl (); $ Perl -> вимагає ("test1.pl"); $ З ob_get_contents = (); ob_end_clean (); друк "Perl: $ з";
?>
Як бачите, це працює відмінно. Як бачите, це працює відмінно. Звичайно ж можна зробити за допомогою системного виклику PHP, але менш ефективно. Звичайно ж можна зробити за допомогою системного виклику PHP, але менш ефективно. Системи () функція почне перекладача кожного разу це називається, в той час як $ Perl-> EVAL () використовується вбудований перекладач в одному адресному просторі, і немає необхідності для створення нового процесу. системи () функція почне перекладача кожного разу це називається, в той час як $ Perl-> EVAL () використовується вбудований перекладач в одному адресному просторі, і немає необхідності для створення нового процесу.
Як було сказано раніше, PHP Perl розширення можна оцінити вбудований Perl-код. Як було сказано раніше, PHP Perl розширення можна оцінити вбудований Perl-код. Цей метод є більш корисним, якщо ви хочете виконати невеликий фрагмент коду. Цей метод є більш корисним, якщо ви хочете виконати невеликий фрагмент коду. У Perl:: EVAL () метод вам не потрібно, щоб створити кілька невеликих файлів Perl, але замість цього просто вставляти Perl код в PHP. У Perl:: EVAL () метод вам не потрібно, щоб створити кілька невеликих файлів Perl, але може замість цього просто вставляти код в Perl PHP. Приклад 3 (test3.php) Приклад 3 (test3.php) <? PHP
друк "Привіт з PHP!"; $ Perl = новий Perl (); $ Perl -> EVAL ("Друк" Привіт з Perl! "); друк "Bye!";
?>
Perl:: EVAL () приймає лише один аргумент - Perl-код для виконання в суворій форматі. Perl:: EVAL () приймає лише один аргумент - Perl-код для виконання в суворій форматі. PHP дозволяє три різних способу запису строкових літерали; одинарними лапками, подвійними лапками або Heredoc. PHP дозволяє три різних способу запису строкових літерали; одинарними лапками, подвійними лапками або Heredoc. Зверніть увагу, що PHP буде діяти на утримання символьні рядки у звичайному порядку, перш ніж вони пройшли до Perl (див. http://www.php.net/manual/language.types.string.php для подробиць). Зверніть увагу, що PHP буде діяти на утримання символьні рядки у звичайному порядку, перш ніж вони пройшли до Perl (див. http://www.php.net/manual/language.types.string.php для подробиць).
У попередньому прикладі ми не отримали будь-яких несподіваних результатів Perl:: EVAL (), але ми могли б це зробити. У попередньому прикладі ми не отримали будь-яких несподіваних результатів Perl:: EVAL (), але ми змогли це зробити. Perl перекладач може виконати той же код в різних контекстах, і результат може бути дуже різним у цих різних контекстах. Perl перекладач може виконати той же код в різних контекстах, і результат може бути дуже різним у цих різних контекстах. Наприклад, список повернувся в скалярному контексті будуть отримані в якості останнього елементу в цьому списку. Наприклад, список повернувся в скалярному контексті будуть отримані в якості останнього елементу в цьому списку.
Perl використовує об'єкт скалярному контексті за замовчуванням, але оцінки в масив або хеш контексті [1] вимагає використання спеціальних прийомів. Perl об'єкт використовує скалярному контексті за замовчуванням, але оцінки у масив або хеш зв'язку [1] вимагає використання спеціальних прийомів. Метод EVAL () не повинен викликатися безпосередньо на Perl об'єкта перекладача, але і на відповідних власності (масив або хеш). Метод EVAL () не повинен викликатися безпосередньо на Perl об'єкта перекладача, але і на відповідних власності (масив або хеш). Приклад 4 (test4.php) Приклад 4 (test4.php) <? PHP
$ Perl = новий Perl (); var_dump ($ Perl -> EVAL ('("", "б", "C ")')); / / EVAL в скалярному контексті var_dump ($ Perl -> масив -> EVAL ('("", "б", "C ")')); / / EVAL в контексті масиву var_dump ($ Perl -> хеш -> EVAL ('("", "б", "C ")')); / / EVAL в контексті хеш
/ * Висновок:
рядок (1) "з" масив (3) ( [0] => рядок (1) "" [1] => рядок (1) "б" [2] => рядок (1) "з" ) масив (2) ( [""] => рядок (1) "б" ["С"] => NULL )
- /
?>
Цей приклад обчислює ті ж дані - список, - у різних контекстах, і як ви можете бачити, Є три різних результату від цих даних. Цей приклад обчислює ті ж дані - список, - у різних контекстах, і як ви можете бачити, Є три різних результату від цих даних.
Perl має кілька областей застосування глобальних змінних (скалярів $ г, @ х масивів, хеші% х і код і х). Perl має кілька областей застосування глобальних змінних (скалярів $ х, @ х масиви, хеші% х і код і х). Perl розширенням PHP дозволяє вам отримати доступ до глобальної скаляр, масив і хеш-змінних. Perl розширенням PHP дозволяє вам отримати доступ до глобальної скаляр, масив і хеш-змінних. Щоб отримати доступ до скалярних змінних Perl, використовуйте нерухомість з такою ж назвою. Щоб отримати доступ до скалярних змінних Perl, використовуйте нерухомість з такою ж назвою. Щоб отримати доступ до масив і хеш-змінних, використовувати той же трюк, як для вибору оцінки контексті. Щоб отримати доступ до масив і хеш-змінних, використовувати той же трюк, як вибору оцінки контексті. Приклад 5 (test5.php) Приклад 5 (test5.php) <? PHP
$ Perl = новий Perl (); $ Perl -> EVAL ('$ х = 1; @ х = 1 .. 4;% х = 1 .. 4'); var_dump ($ Perl -> х); var_dump ($ Perl -> масив -> х); var_dump ($ Perl -> хеш -> х);
/ * Висновок:
Int (1) масиву (4) ( [0] => Int (1) [1] => Int (2) [2] => Int (3) [3] => Int (4) ) масив (2) ( [1] => Int (2) [3] => Int (4) )
- /
?>
Як бачите, тут ми маємо три змінні з такою ж назвою, але в різних діапазонах, і, звичайно, всі три мають різні значення. Як бачите, тут ми маємо три змінні з такою ж назвою, але в різних діапазонах, і, звичайно, всі три мають різні значення.
Розширення Perl дозволяє не тільки читати, але також письмово Perl змінних. Розширення Perl дозволяє не тільки читати, але також письмово Perl змінних. Ви можете зробити це шляхом створення нового значення відповідного майна, проте, ви не можете змінити частину Perl масив або хеш. Ви можете зробити це шляхом створення нового значення відповідного майна, проте, ви не можете змінити частину Perl масив або хеш. (Зміни не набудуть чинності.) (Зміни не набудуть чинності.)
Оцінка Perl змінних тільки один простий взаємодії між PHP і Perl. Оцінка Perl змінних тільки один простий взаємодії між PHP і Perl. Частіше за все ми повинні назвати одним Perl функції. Частіше за все ми повинні назвати одним Perl функції. Perl розширення PHP надає простий і елегантний спосіб це зробити. Perl розширення PHP надає простий і елегантний спосіб це зробити. Вам потрібно лише викликати метод з відповідним ім'ям через перекладача, і передавати параметри до нього: Вам потрібно лише викликати метод з відповідним ім'ям через перекладача, і передавати параметри до нього: Приклад 6 (test6.php) Приклад 6 (test6.php) <? PHP
$ Perl = новий Perl (); $ Perl -> EVAL (' на південь суму ( мій $ х = зрушення (@_); Еогеасп ту $ у (@ _) ( $ X + Y = $; ) повернути $ х; ) ');
друк $ Perl -> Eval ("Сума (1, 2, 3, 4, 5, 6, 7, 8, 9)"). ""; друк $ Perl -> сума (1, 2, 3, 4, 5, 6, 7, 8, 9). "";
?>
Функція може отримувати параметри і повертати скаляр або складних значення. Функція може отримувати параметри і повертати скаляр або складних значення. Як EVAL (), будь-який виклик функції може бути зроблено в одному з трьох різних контекстах (скаляр, масив або хеш), і контекст, можуть бути вказані в тому ж шляху. Як EVAL (), будь-який виклик функції може бути зроблено в одному з трьох різних контекстах (скаляр, масив або хеш), і контекст, можуть бути вказані в тому ж шляху.
Perl використовує пакети обмежити ім'я видимості змінних і функцій, а іноді нам необхідно викликати функції або отримати доступ до змінних з цих пакетів з допомогою кваліфікованих імен. Perl використовує пакети обмежити ім'я видимості змінних і функцій, а іноді нам необхідно викликати функції або отримати доступ до змінних з цих пакетів з допомогою кваліфікованих імен. Такі імена не підтверджує синтаксису PHP, але вони можуть бути використані з особливою побудувати -> (). Такі імена не підтверджує синтаксису PHP, але вони можуть бути використані з особливою побудувати -> (). Приклад 7 (test7.php) Приклад 7 (test7.php) <? PHP
$ Perl = новий Perl (); $ Perl -> EVAL ("використання Digest:: MD5 КЯ (md5_hex); ');
Ехо "PHP:"; var_dump (md5 ('Hello'));
Ехо "Perl:"; var_dump ($ Perl -> EVAL ('md5_hex ("Hello ");')); var_dump ($ Perl -> md5_hex ("Привіт")); var_dump ($ Perl -> ("Digest:: MD5:: md5_hex") ("Hello"));
?>
Цей приклад використовує зовнішній модуль Perl md5, яка завантажується під час виконання. Цей приклад використовує зовнішній модуль Perl md5, яка завантажується під час виконання. Якщо у вас є повний Perl установка, завантаження та встановлення модулів CPAN так само просто, як завантаження архіву, виділяючи його на Perl каталог верхнього рівня і набравши: Якщо у вас є повний Perl установка, завантаження та встановлення модулів CPAN так само просто, як завантаження архіву, виділяючи його на Perl каталог верхнього рівня і наберіть: CD Perl Perl makefile.pl робити зробити тест зробити установки
у командному рядку. у командному рядку. У системах Windows вам доведеться замінити робити з NMAKE, однак це буде працювати тільки якщо у вас є МСВС встановлені кошти. У системах Windows вам доведеться замінити робити з NMAKE, однак це буде працювати тільки якщо у вас є МСВС встановлені кошти.
Якщо у вас немає повної установки Perl - тобто ви працюєте у Perl як загальний об'єкт - це ще можна запускати Perl-модулів, коли вони були побудовані в інших місцях. Якщо у вас немає повної установки Perl - тобто ви працюєте у Perl як загальний об'єкт - це ще можна запускати Perl-модулів, коли вони були побудовані в інших місцях. Мінімальні умови, необхідні для виконання яких складається з всього набору Perl управління пакетами (*. м.) файли з perllib, а також повний perllibauto perllibDigest і каталогів. Мінімальні умови, необхідні для виконання яких складається з всього набору Perl управління пакетами (*. м.) Файли з perllib, а також повний perllibauto perllibDigest і каталогів.
Розширенням PHP Perl не можу назвати внутрішньої Perl функції (друк, читання і т.д.), вам потрібно буде використовувати Perl:: EVAL () для того, щоб отримати доступ до цих. Perl розширенням PHP не може викликати внутрішні Perl функції (друк, читання і т.д.), вам потрібно буде використовувати Perl:: EVAL () для того, щоб отримати доступ до цих. Наприклад, для того, щоб включати мінімальний модуль навколишнього середовища, викладених вище, ви повинні зателефонувати за телефоном: Наприклад, для того, щоб включати мінімальний модуль навколишнього середовища, викладених вище, ви повинні зателефонувати за телефоном: $ Perl-> Eval ("BEGIN (unshift (@ INC, 'perlenv_dirpath');)"); Використання Perl об'єктів Використання Perl об'єктів
Як і багато інших Мови програмування, Perl використовує об'єктно-орієнтований підхід, але він не має спеціального синтаксису для класів. Як і багато інших Мови програмування, Perl використовує об'єктно-орієнтований підхід, але він не має спеціального синтаксису для класів. Заняття тільки пакети, які відбуваються з забезпечити методи роботи з об'єктами, методи просто пакет функцій, які очікують посилання на об'єкт в якості першого аргументу; об'єкти просто посилання, які "знають", який клас вони належать. Заняття тільки пакети, які відбуваються з забезпечити методи роботи з об'єктами, методи просто пакет функцій, які очікують посилання на об'єкт в якості першого аргументу; об'єкти просто посилання, які "знають", який клас вони належать.
Perl розширення дозволяє створювати екземпляри об'єктів з Perl скрипт і отримати доступ до їх властивостям і методам. Perl розширення дозволяє створювати екземпляри об'єктів з Perl скрипт і отримати доступ до їх властивостям і методам. Того ж класу Perl використовується для цього, але на цей раз вам необхідно передати аргументи на його конструктор. У той же Perl клас використовується для цього, але на цей раз вам потрібно передати аргументи на його конструктор. Першим аргументом є Perl клас (пакет) ім'я, друге додаткову назву конструктора, а всі, що залишилися аргументи конструктора від конкретних умов. Першим аргументом є Perl клас (пакет) ім'я, друге додаткову назву конструктора, а всі, що залишилися аргументи конструктора від конкретних умов. Якщо ім'я конструктора не вказано, то конструктор за умовчанням використовується новий. Якщо ім'я конструктора не вказаний, то за замовчуванням конструктор нового використовується. нові Perl ([рядок class_name, [рядок constructor_name, змішана аргументи]]);
Наступний приклад визначає клас Perl-Пойнт-2 з конструкторами, нові і Point. Наступний приклад визначає клас Perl-Пойнт з двома будівельниками, нові і Point. Перший конструктор не приймає ніяких спеціальних аргументів, другий одержує початкові значення координат. Перший конструктор не приймає ніяких спеціальних аргументів, другий одержує початкові значення координат. Цей клас має дві властивості, х, у і 2 методи, переміщати () і отримати (). Цей клас має дві властивості, х і у, а також двома способами переміщення () і отримати (). Як бачите, метод переміщення () переміщує точку на зміщення, зазначених у переданих їй аргументів. Як бачите, метод переміщення () переміщається в точку, зміщення що зазначена в переданих їй аргументів. Метод отримати () є більш цікавим. Метод отримати () є більш цікавим. В залежності від контексту, вона повертає поточні координати у вигляді рядка (в скалярному контексті) або у вигляді масиву (у контексті масиву). Залежно від контексту, вона повертає поточні координати у вигляді рядка (в скалярному контексті) або у вигляді масиву (у контексті масиву).
Як і в рідній об'єктів PHP, ви можете викликати методи екземпляра Perl об'єктів і доступ до їх властивостями. Як і в рідній об'єктів PHP, ви можете викликати методи екземпляра Perl об'єктів і доступ до їх властивостями. Єдина відмінність полягає в контексті дзвінка. Єдина відмінність полягає в контексті дзвінка. За замовчуванням методи викликаються в скалярному контексті. За замовчуванням методи викликаються в скалярному контексті. Для виклику їх у масив або хеш контексті, використовуючи той же трюк, як раніше: метод не повинен викликатися безпосередньо на Perl об'єкта, але й на спеціальних власності (масив або хеш). Для виклику їх в масив або хеш контексті, використовуючи той же трюк, як раніше: метод не повинен викликатися безпосередньо на Perl об'єкта, але й на спеціальних власності (масив або хеш).
Всі властивості можуть бути доступні безпосередньо (без масиву або хеш власності). Всі властивості можуть бути доступні безпосередньо (без масиву або хеш власності). Це відбувається тому, Perl об'єкти можуть містити лише скалярні властивості. Це відбувається тому, Perl об'єкти можуть містити лише скалярні властивості. Масиви і хеші представлені як посилання на них, а також посилання домішки в Perl. Масиви і хеші представлені як посилання на них, а також посилання домішки в Perl. Властивості об'єкта можуть бути прочитані, написано, зміна і навіть не визначено, але частина майна не може бути змінена. Властивості об'єкта можуть бути прочитані, написано, зміна і навіть не визначено, але частина майна не може бути змінена. Наприклад, ми не можемо змінити елемент масиву власності. Наприклад, ми не можемо змінити елемент масиву власності. Приклад 8 (test8.php) Приклад 8 (test8.php) <? PHP
$ Perl = новий Perl (); $ Perl -> EVAL (' пакет Point; на південь нові ( $ Це мій = зміну; ту $ типу точка відліку ($ це) | | $ це; ту $ самостійної = (); $ Само-> (х) = 0; $ Само-> (у) = 0; благословити $ самостійної, $ типу повернути $ себе; ) підрозділ ( $ Це мій = зміну; ту $ типу точка відліку ($ це) | | $ це; ту $ самостійної = (); $ Само-> (х) = зміну; $ Само-> (у) = зміну; благословити $ самостійної, $ типу повернути $ себе; ) на південь рухатися ( моя $ = самостійної зміни; $ Само-> (х) + = зміну; $ Само-> (у) + = зміну; ) на південь отримати ( моя $ = самостійної зміни; якщо (wantarray) ( повернення ($ самостійної-> (х), $ самостійної-> (у)); ) (Інше повернути $ самостійної-> (х). "Х". $ Само-> (у); ) ) ');
/ / Створюємо об'єкт Perl "Point" з конструктор "нового" $ P1 = новий Perl ("Point"); var_dump ($ p1); $ P1 -> х + = 100; / / змінити власності відключеному ($ p1 -> у) / / undefine власності var_dump ($ p1);
/ / Створюємо об'єкт Perl "Point" з конструктором "Point" $ Р2 = новий Perl ("Point", "Point", 100, 200); var_dump ($ р2); $ Р2 -> рух (200, 200); / / Виклик "хід" var_dump ($ р2 -> отримати ()); / / Виклик "отримати" у скалярному контексті var_dump ($ р2 -> масив -> отримати ()); / / Виклик "отримати" в контексті масиву Ехо $ р2 -> х. "." . $ Р2 -> у. ""; / / Друк Perl властивості об'єкта
?> Обробка помилок Обробка помилок
Perl модуль використовує механізм PHP винятком повідомити Perl помилок. Perl модуль використовує механізм PHP Perl винятком представити помилок. Спеціальний клас винятку, PerlException, використовується для цього. Спеціальний клас винятку, PerlException, використовується для цього. У наступному прикладі намагається оцінити недійсними Perl коду, і, як наслідок Perl:: EVAL () генерує PerlException: У наступному прикладі намагається оцінити недійсними Perl коду, і, як наслідок Perl:: EVAL () кидає PerlException: Приклад 9 (test9.php) Приклад 9 (test9.php) <? PHP
$ Perl = новий Perl (); (Спробувати var_dump ($ Perl -> EVAL ('$ = $ и ($ D ).')); Ехо "OK"; ) спіймати (PerlException $ виняток) ( Ехо "Perl про помилку:". $ Виняток -> GetMessage (). ""; )
?>
Винятки можуть бути кинуті на Perl:: EVAL (), Perl:: вимагати (), чи заклик до Perl функції, методу чи конструктора об'єкта. Винятки можуть бути кинуті на Perl:: EVAL (), Perl:: вимагати (), чи заклик до Perl функції, методу чи конструктора об'єкта.