Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PerlΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 38

Автор ΠœΠΈΡ…Π°ΠΈΠ» Π¨ΠΎΡ…ΠΈΡ€Π΅Π²

Π’ любом ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΡƒΠΊΠ°Π·Π°Π² Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя. ПолноС имя (ΠΈΠ»ΠΈ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ имя) ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ нСдинамичСского ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Perl состоит ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ :: Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ эти Π΄Π²Π΅ части Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


$Package::variable - скалярная пСрСмСнная ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° Package $Another::variable - скалярная пСрСмСнная ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° Another &Package::subroutine - ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° Package Package::subroutine - прСфикс ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ


Если Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Π½Π΅ описаны явно Π² составС ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ΠΈ относятся ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ main. МоТно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ объявлСниС этого ΠΏΠ°ΠΊΠ΅Ρ‚Π° нСявно присутствуСт Π² Π½Π°Ρ‡Π°Π»Π΅ любой Perl-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π²ΡˆΠΈΠ΅ΡΡ Π΄ΠΎ сих ΠΏΠΎΡ€ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π² Ρ‚ΠΎΠΌ числС Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ…, Π½Π° самом Π΄Π΅Π»Π΅ относятся ΠΊ этому ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ. Имя ΠΏΠ°ΠΊΠ΅Ρ‚Π° main ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ указываСтся, Π½ΠΎ ΠΏΡ€ΠΈ нСобходимости ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ явно:


%pseudo_name = ('Marylin Monroe' => 'Norma Jean'); print $main::pseudo_name{'Marylin Monroe'};


Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ записи ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:


@main::array # с явным ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π° main @::array # с пустым ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π° @array # Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°


ИмСна ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ лСксичСским ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ my() ΠΈ our() ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π² собствСнном пространствС ΠΈΠΌΠ΅Π½. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ my(), Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ исходного Ρ„Π°ΠΉΠ»Π°, Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ our(), Π²ΠΈΠ΄Π½Ρ‹ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π΄Π°ΠΆΠ΅ Ссли части ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сосущСствования ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ· лСксичСской области видимости ΠΈ пространства ΠΈΠΌΠ΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚Π°:


$variable = 'глобальная'; # пСрСмСнная ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° main my $variable = 'лСксичСская'; # пСрСмСнная ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠ° print "$main::variable $variable"; # Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ: 'глобальная лСксичСская'


Π’ Perl допускаСтся использованиС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ составныС ΠΈΠΌΠ΅Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π°: Package::Subpackage. Π’ этом случаС ΠΈΠΌΠ΅Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ, Π° исходныС Ρ„Π°ΠΉΠ»Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°Ρ…. БоставныС ΠΈΠΌΠ΅Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡƒΡ‚ΠΈ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ компилятор Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с исходным тСкстом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π—Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ require исходный Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


use lib("$path/lib"); # Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ списку поиска # Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ внСшнюю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° require 'Package/Subpackage/Program.pm';


Если Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ require ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² Π²ΠΈΠ΄Π΅ "Π³ΠΎΠ»ΠΎΠ³ΠΎ слова" (bareword), Π° Π½Π΅ Π² Π²ΠΈΠ΄Π΅ строки ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ имя Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° формируСтся ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ. Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² '::' Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° замСняСтся Π½Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, Π° ΠΊ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° добавляСтся суффикс .pm. Буффикс .pm ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ„Π°ΠΉΠ»ΠΎΠ², содСрТащих Perl-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΈ подразумСваСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ require ΠΈ use. Π’ΠΎΠ³Π΄Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:


# Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ внСшнюю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° require Package::Subpackage::Program; # Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ· Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° print Package::Subpackage::Program::subroutine(), "\n";


Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ обращСния ΠΊ внСшним ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ - ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΡ… Π½Π° этапС компиляции, Ρ‡Ρ‚ΠΎ часто Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ прСимущСства.

Π₯отя Π΅ΡΡ‚ΡŒ Π½Π΅ΠΌΠ°Π»ΠΎ случаСв, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ внСшниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ‡Π°Ρ‰Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π²ΠΎ врСмя компиляции. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ use. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ использования use ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с require Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ошибки Π²Ρ‹ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄ΠΎ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° этапС компиляции. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠΌΠ°Π½Π΄Π° use выполняСт ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΈΠΌΠ΅Π½, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅, послС Ρ‡Π΅Π³ΠΎ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.


use Package::Subpackage::Module; # ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ


Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ use Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ стандартныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Perl. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ use встрСтятся ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ этой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ обсуТдСнии Ρ€Π°Π±ΠΎΡ‚Ρ‹ с модулями.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ require ΠΈ use Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для контроля вСрсии Perl, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ для компиляции ΠΈ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· этих ΠΊΠΎΠΌΠ°Π½Π΄ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ число, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ вСрсии, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ. НапримСр:


use 5.005; # ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Perl Π½Π΅ Π½ΠΈΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ require 5.008007; # ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Perl 5.8.7 ΠΈ Π²Ρ‹ΡˆΠ΅


Если Π½Π΅ выполняСтся Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π² use, Ρ‚ΠΎ компиляция Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ. НСвыполнСниС трСбования, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² require, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ - это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ оформлСнная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ использования. ΠœΠΎΠ΄ΡƒΠ»ΠΈ появились Π² Perl, начиная с вСрсии 5, ΠΈ с Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… Perl-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ внСшний интСрфСйс - ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для использования Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. Доступ ΠΊ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ интСрфСйсу модуля Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ организуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° импортирования ΠΈΠΌΠ΅Π½, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Π² стандартном ΠΌΠΎΠ΄ΡƒΠ»Π΅ Exporter. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ оформлСния Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ модуля (сохранСнного Π² Ρ„Π°ΠΉΠ»Π΅ Module.pm):


package Module; # пространство ΠΈΠΌΠ΅Π½ модуля use 5.006001; # ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Perl Π½Π΅ Π½ΠΈΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ use strict; # Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ use warnings; # ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΡƒΡŽ диагностику our $VERSION = '1.00'; # вСрсия модуля require Exporter; # Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ стандартный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Exporter our @ISA = qw(Exporter); # нСизвСстныС ΠΈΠΌΠ΅Π½Π° ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² Π½Π΅ΠΌ our @EXPORT = qw( subroutine ); # ΠΈΠΌΠ΅Π½Π°, экспортируСмыС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ our @EXPORT_OK = qw( $variable ); # ΠΈΠΌΠ΅Π½Π°, экспортируСмыС ΠΏΠΎ запросу $Module::variable = 'пСрСмСнная 1'; # скаляр ΠΈΠ· модуля Module sub subroutine { # ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ· модуля Module return "'ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 1 $Module::variable'"; } 1; __END__


АвтоматичСски ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ скСлСт Π½ΠΎΠ²ΠΎΠ³ΠΎ модуля (Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ модуля ΠΊ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ) ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ h2xs, входящСй Π² состав дистрибутива Perl. НапримСр, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ 'Module::Name' вСрсии 1.00 ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:


h2xs -AX -n Module::Name -v 1.00


Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая обращаСтся ΠΊ этому ΠΌΠΎΠ΄ΡƒΠ»ΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ экспортированныС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠΌΠ΅Π½Π°, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ use Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΈΠΌΠ΅Π½Π΅ΠΌ модуля:


use Module; # ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ # ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ subroutine(); # Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ &Module::subroutine()


Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ явно Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ пСрСчислСнныС ΠΈΠΌΠ΅Π½Π° (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° import), примСняСтся Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ use со списком ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈΠΌΠ΅Π½:


use Module qw($variable); # Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ print "$variable\n"; # скаляр $Module::variable


Антонимом ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ use являСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° no, которая нСявно выполняСт Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° unimport для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ use Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ вСрсия ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ модуля соотвСтствуСт трСбованиям. Для этого послС ΠΈΠΌΠ΅Π½ΠΈ модуля указываСтся минимальная трСбуСмая вСрсия:


use Module 1.00; # ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ Π½ΠΈΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ вСрсии


Помимо ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ.

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Perl-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ исполняСмыС Π±Π»ΠΎΠΊΠΈ, фактичСски ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Они ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ: BEGIN, END, CHECK, INIT. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π· Π² любом мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΈ Π±Π»ΠΎΠΊΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ автоматичСски Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ выполнСния Perl-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘Π»ΠΎΠΊ BEGIN выполняСтся ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅: Π²ΠΎ врСмя компиляции сразу послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ нСсколько Π±Π»ΠΎΠΊΠΎΠ² BEGIN, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² порядкС ΠΈΡ… описания. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ use для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π²ΠΎ врСмя компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘Π»ΠΎΠΊ END выполняСтся ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅: послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ perl Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. Он выполняСтся Π΄Π°ΠΆΠ΅ Π² случаС Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НСсколько Π±Π»ΠΎΠΊΠΎΠ² END Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² порядкС, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ Π² Ρ„Π°ΠΉΠ»Π΅. Π‘Π»ΠΎΠΊΠΈ END Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, Ссли ΠΏΡ€ΠΈ запускС Π erl Π·Π°ΠΊΠ°Π·Π°Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ компиляция (ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -c), ΠΈΠ»ΠΈ Ссли компиляция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ END доступна ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ пСрСмСнная $?, содСрТащая ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ.