POD2-RU
view release on metacpan or search on metacpan
lib/POD2/RU/perlmod.pod view on Meta::CPAN
sub identify_typeglob {
my $glob = shift;
print 'You gave me ', *{$glob}{PACKAGE}, '::', *{$glob}{NAME}, "\n";
}
identify_typeglob *foo;
identify_typeglob *bar::baz;
ÐÑо вÑведеÑ
You gave me main::foo
You gave me bar::baz
ÐоÑаÑÐ¸Ñ C<*foo{THING}> Ð¼Ð¾Ð¶ÐµÑ Ñакже иÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑÑÑлки на
оÑделÑнÑе ÑлеменÑÑ *foo. СмоÑÑиÑе L<perlref>.
ÐпÑеделение подпÑогÑÐ°Ð¼Ð¼Ñ (и обÑÑвлениÑ(declarations), ÐºÐ¾Ð»Ñ Ð½Ð° Ñо поÑло)
не обÑзаÑелÑно должно наÑ
одиÑÑÑÑ Ð² пакеÑе, ÑимволÑнÑÑ ÑаблиÑÑ ÐºÐ¾ÑоÑого они
занимаÑÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ Ð¿Ð¾Ð´Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð·Ð° пÑеделами пакеÑа
Ñвно квалиÑиÑиÑÑÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð´Ð¿ÑогÑаммÑ:
package main;
sub Some_package::foo { ... } # &foo опÑеделÑеÑÑÑ Ð² пакеÑе Some_package
ÐÑо пÑоÑÑо кÑаÑÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð»Ñ Ð¿ÑиÑÐ²Ð¾ÐµÐ½Ð¸Ñ ÑÐ°Ð¹Ð¿Ð³Ð»Ð¾Ð±Ñ (typeglob) во вÑÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑии:
BEGIN { *Some_package::foo = sub { ... } }
и ÑÑо I<не> Ñо же Ñамое, ÑÑо пиÑаÑÑ:
{
package Some_package;
sub foo { ... }
}
РпеÑвÑÑ
двÑÑ
веÑÑиÑÑ
Ñело подпÑогÑÐ°Ð¼Ð¼Ñ Ð»ÐµÐºÑиÑеÑки лежиÑ
в оÑновном пакеÑе, а I<не> в Some_package. Так
ÑÑо-Ñо вÑоде ÑÑого:
package main;
$Some_package::name = "fred";
$main::name = "barney";
sub Some_package::foo {
print "in ", __PACKAGE__, ": \$name is '$name'\n";
}
Some_package::foo();
напеÑаÑаеÑ:
in main: $name is 'barney'
вмеÑÑо:
in Some_package: $name is 'fred'
ÐÑо Ñакже Ð¸Ð¼ÐµÐµÑ Ð¿Ð¾ÑледÑÑÐ²Ð¸Ñ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SUPER:: квалиÑикаÑоÑ
(См. L<perlobj>).
=head2 BEGIN, UNITCHECK, CHECK, INIT и END
X<BEGIN> X<UNITCHECK> X<CHECK> X<INIT> X<END>
СÑÑеÑÑвÑÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² ÑпеÑиалÑно именованного кода, коÑоÑÑе вÑполнÑÑÑÑÑ Ð² наÑале и в
в конÑе ÑабоÑаÑÑей пÑогÑÐ°Ð¼Ð¼Ñ Perl. ÐÑо блоки C<BEGIN>,
C<UNITCHECK>, C<CHECK>, C<INIT>, и C<END>.
ÐÑи блоки кода могÑÑ Ð±ÑÑÑ Ð¿ÑеÑикÑом C<sub>, ÑÑо даÑÑ Ð²Ð½ÐµÑний вид
подпÑогÑÐ°Ð¼Ð¼Ñ (Ñ
оÑÑ ÑÑо не ÑÑиÑаеÑÑÑ Ñ
оÑоÑим ÑÑилем). СледÑÐµÑ Ð¾ÑмеÑиÑÑ
ÑÑо ÑÑи блоки кода в дейÑÑвиÑелÑноÑÑи не ÑÑÑеÑÑвÑÑÑ ÐºÐ°Ðº именованнÑе подпÑогÑÐ°Ð¼Ð¼Ñ (неÑмоÑÑÑ Ð½Ð°
иÑ
внеÑний вид). ÐÑи блоки даÑÑ ÑакÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе имеÑÑ
B<более, Ñем один> Ñакой блок кода в пÑогÑамме, и они
B<вÑе> бÑдÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ Ð² ÑооÑвеÑÑÑвÑÑÑий моменÑ.
Таким обÑазом Ð²Ñ Ð½Ðµ можеÑе вÑполнÑÑÑ Ð»Ñбой из
ÑÑиÑ
блоков кода по имени.
Ðлок кода C<BEGIN> вÑполнÑеÑÑÑ ÐºÐ°Ðº можно ÑкоÑее, как ÑолÑко он полноÑÑÑÑ Ð¾Ð¿ÑеделÑн
даже до анализа оÑÑалÑного ÑодеÑжимого Ñайла (или ÑÑÑоки).
ÐÑ Ð¼Ð¾Ð¶ÐµÑе имеÑÑ Ð½ÐµÑколÑко блоков C<BEGIN> внÑÑÑи Ñайла (или в
вÑполнÑемой eval'ом ÑÑÑоке); они бÑдÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ Ð² поÑÑдке опÑеделениÑ. ÐоÑÐ¾Ð¼Ñ ÑÑо блок C<BEGIN>
вÑполнÑеÑÑÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾, он Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑаÑиÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð¿ÑогÑамм
и ÑÐ¾Ð¼Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾Ð³Ð¾ из дÑÑгиÑ
Ñайлов во вÑемени, ÑÑÐ¾Ð±Ñ Ð±ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñм Ð´Ð»Ñ Ð¾ÑÑалÑной ÑаÑÑи во вÑемени компилÑÑии
и во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (compile and run time). ÐоÑле Ñого как блок C<BEGIN> законÑилÑÑ Ð¾Ð½ ÑÑÐ°Ð·Ñ Ð½ÐµÐ¾Ð¿ÑеделеннÑм (undefined) и лÑбой
иÑполÑзÑемÑй код возвÑаÑÐ°ÐµÑ Ð² Perl пÑл Ñвоей памÑÑи (memory pool).
Ðлок кода C<END> вÑполнÑеÑÑÑ Ð½Ð°ÑÑолÑко поздно наÑколÑко ÑÑо возможно
, Ñо еÑÑÑ, поÑле Ñого, как Perl завеÑÑÐ°ÐµÑ Ð²Ñполнение пÑогÑÐ°Ð¼Ð¼Ñ Ð¸ ÑÑÐ°Ð·Ñ Ð¿ÐµÑед Ñем, как
инÑеÑпÑеÑаÑÐ¾Ñ Ð²ÑÐ¹Ð´ÐµÑ (is being exited), даже еÑли ÑÑо вÑÑ
од в ÑезÑлÑÑаÑе ÑÑнкÑии die().
(Ðо еÑли он пеÑеÑÐµÐºÐ°ÐµÑ Ð² дÑÑгÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ ÑеÑез C<exec>, или
вÑдÑваеÑÑÑ Ð¸Ð· Ð²Ð¾Ð´Ñ Ð¿Ð¾ ÑигналÑ--Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÐµÑеÑ
ваÑиÑÑ (trap) ÑÑо Ñами
(еÑли Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе).) ÐÑ Ð¼Ð¾Ð¶ÐµÑе имеÑÑ Ð½ÐµÑколÑко C<END>блоков в Ñайле--они
бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð² обÑаÑном поÑÑдке опÑеделениÑ; Ñо еÑÑÑ: поÑледний пÑиÑел, пеÑвÑй
вÑÑел (last in, first out) (LIFO). C<END> блоки не вÑполнÑÑÑÑÑ Ð¿Ñи запÑÑке perl Ñ
клÑÑем C<-c>, или, еÑли пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ñбой компилÑÑии.
ÐбÑаÑиÑе внимание, ÑÑо блоки кода C<END> B<не> вÑполнÑÑÑÑÑ Ð² конÑе ÑÑÑоки
C<eval()>: еÑли лÑбÑе блоки кода C<END> ÑоздаÑÑÑÑ Ð² ÑÑÑоке C<eval()>,
Ñо они бÑдÑÑ Ð²ÑполнÑÑÑÑÑ Ñак же, как лÑбой дÑÑгой C<END> блок пакеÑного кода
в поÑÑдке LIFO ÑÑÐ°Ð·Ñ Ð¿ÐµÑед Ñем, как инÑеÑпÑеÑаÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð²ÑÑ
одиÑÑ (just before the interpreter is being exited).
ÐнÑÑÑи блока C<END>, C<$?> ÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°Ñение, коÑоÑÑе пÑогÑамма
ÑобиÑаеÑÑÑ Ð¿ÐµÑедаÑÑ C<exit()>. ÐÑ Ð¼Ð¾Ð¶ÐµÑе измениÑÑ C<$?>, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð²ÑÑ
одное (exit
value of the program) знаÑение пÑогÑаммÑ. ÐÑÑеÑегайÑеÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ C<$?> ÑлÑÑайно (напÑимеÑ, запÑÑк Ñего-Ñо ÑеÑез C<system>).
X<$?>
ÐнÑÑÑи блока C<END>, знаÑение C<${^GLOBAL_PHASE}> бÑÐ´ÐµÑ C<"END">.
Ðлоки кода C<UNITCHECK>, C<CHECK> и C<INIT> ÑвлÑÑÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñми Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð¹Ð¼Ð°ÑÑ
пеÑеÑ
од Ð¼ÐµÐ¶Ð´Ñ Ñазой компилÑÑии и Ñазой вÑполнениÑ
оÑновной пÑогÑаммÑ(execution phase of the main program).
Ðлоки C<UNITCHECK> вÑполнÑÑÑÑÑ ÑолÑко поÑле Ñого, как ÑниÑ, опÑеделеннÑй им бÑÐ´ÐµÑ Ð¾ÑкомпилиÑован.
Файл оÑновной пÑогÑÐ°Ð¼Ð¼Ñ Ð¸ каждÑй загÑÑжаемÑй ей модÑÐ»Ñ - ÑÑо
единиÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑии, Ñакие как ÑÑÑока C<eval>s, во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´ компилиÑÑеÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
конÑÑÑÑкÑии C<(?{ })> в ÑегекÑе, вÑзова C<do FILE>, C<require FILE>,
и кода поÑле клÑÑа C<-e> командной ÑÑÑоки.
Ðлоки C<BEGIN> и C<UNITCHECK> не ÑвÑÐ·Ð°Ð½Ñ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно Ñазами
инÑеÑпÑеÑаÑоÑа Perl. Ðни могÑÑ Ð±ÑÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð¸ вÑполнÑÑÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð»Ñбой ÑазÑ.
Ðлоки кода C<CHECK> вÑполнÑÑÑÑÑ ÑолÑко поÑле ÑÐ°Ð·Ñ Ð¾ÐºÐ¾Ð½ÑÐ°Ð½Ð¸Ñ B<наÑалÑной> компилÑÑии Perl
и до наÑала вÑемени вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (run time), в поÑÑдке LIFO. Ðлоки кода C<CHECK> иÑполÑзÑÑÑÑÑ
в комплекÑе компилÑÑоÑа Perl (Perl compiler suite) Ð´Ð»Ñ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑкомпилиÑованного ÑоÑÑоÑÐ½Ð¸Ñ Ð¿ÑогÑаммÑ.
ÐнÑÑÑи блока C<CHECK>, знаÑение пеÑеменной C<${^GLOBAL_PHASE}> бÑÐ´ÐµÑ C<"CHECK">.
Ðлоки C<INIT> вÑполнÑÑÑÑÑ ÑÑÐ°Ð·Ñ Ð¿ÐµÑед наÑалом вÑемени вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Perl (Perl runtime begins execution),
в поÑледоваÑелÑноÑÑи "пеÑвÑй воÑел, пеÑвÑй вÑÑл" (FIFO).
ÐнÑÑÑи блока C<INIT> , знаÑение C<${^GLOBAL_PHASE}> бÑÐ´ÐµÑ C<"INIT">.
Ðлоки C<CHECK> и C <INIT> в коде компилиÑÑÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ C<require>, ÑÑÑокой C <do>,
или ÑÑÑокой C<eval> не бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ, еÑли они возникаÑÑ Ð¿Ð¾Ñле оконÑаниÑ
ÑÐ°Ð·Ñ Ð¾Ñновной компилÑÑии; ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ñоблемой в mod_perl и дÑÑгиÑ
ÑÑойкиÑ
ÑÑедаÑ
(persistent environments), иÑполÑзÑÑÑиÑ
ÑÑи ÑÑнкÑии Ð´Ð»Ñ Ð·Ð°Ð³ÑÑзки кода во вÑÐµÐ¼Ñ Ð²ÑполнениÑ.
ÐÑи иÑполÑзовании клÑÑей B<-n> и B<-p> в Perl, C<BEGIN> и C<END>
ÑабоÑаÑÑ Ñак же, как они ÑабоÑаÑÑ Ð² B<awk>, как вÑÑожденнÑй ÑлÑÑай.
Ðба и C<BEGIN> и C<CHECK> блоки вÑполнÑÑÑÑÑ Ð¿Ñи иÑполÑзовании клÑÑа B<-c>
Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑии ÑолÑко Ð´Ð»Ñ Ð¿ÑовеÑки ÑинÑакÑиÑа , Ñ
оÑÑ Ð¾Ñновной код
не вÑполнÑеÑÑÑ.
ÐÑогÑамма B<begincheck> показÑÐ²Ð°ÐµÑ ÑÑно ÑÑо поведение, в конеÑном ÑÑеÑе:
#!/usr/bin/perl
# begincheck
print "10. Ordinary code runs at runtime.\n";
END { print "16. So this is the end of the tale.\n" }
INIT { print " 7. INIT blocks run FIFO just before runtime.\n" }
UNITCHECK {
print " 4. And therefore before any CHECK blocks.\n"
}
CHECK { print " 6. So this is the sixth line.\n" }
print "11. It runs in order, of course.\n";
BEGIN { print " 1. BEGIN blocks run FIFO during compilation.\n" }
END { print "15. Read perlmod for the rest of the story.\n" }
CHECK { print " 5. CHECK blocks run LIFO after all compilation.\n" }
INIT { print " 8. Run this again, using Perl's -c switch.\n" }
print "12. This is anti-obfuscated code.\n";
END { print "14. END blocks run LIFO at quitting time.\n" }
BEGIN { print " 2. So this line comes out second.\n" }
UNITCHECK {
print " 3. UNITCHECK blocks run LIFO after each file is compiled.\n"
}
INIT { print " 9. You'll see the difference right away.\n" }
print "13. It merely _looks_ like it should be confusing.\n";
__END__
#!/usr/bin/perl
# begincheck_ru
print "10. ÐбÑÑнÑй код, ÑабоÑаÑÑий во вÑÐµÐ¼Ñ Ð²ÑполнениÑ.\n";
END { print "16. Так ÑÑо ÑÑо ÐºÐ¾Ð½ÐµÑ Ñказки.\n" }
INIT { print " 7. Ðлоки INIT запÑÑкаÑÑ FIFO непоÑÑедÑÑвенно пеÑед ÑанÑаймом (runtime).\n" }
UNITCHECK {
print " 4. РпоÑÑÐ¾Ð¼Ñ Ð¿ÐµÑед лÑбÑм блоком CHECK.\n"
}
CHECK { print " 6. Так ÑÑо ÑÑо ÑеÑÑÐ°Ñ ÑÑÑока.\n" }
print "11. Ðна вÑполнÑеÑÑÑ Ð¿Ð¾ÑледоваÑелÑно, конеÑно.\n";
BEGIN { print " 1. BEGIN блоки запÑÑкаÑÑÑÑ FIFO во вÑÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑии.\n" }
END { print "15. ЧиÑайÑе perlmod Ð´Ð»Ñ Ð¾ÑÑалÑной ÑаÑÑи ÑаÑÑказа.\n" }
CHECK { print " 5. CHECK блоки запÑÑкаÑÑÑÑ LIFO поÑле вÑей компилÑÑии.\n" }
INIT { print " 8. ÐапÑÑÑиÑÑ ÑÑо Ñнова, иÑполÑзÑÑ ÐºÐ»ÑÑ Perl -c.\n" }
print "12. ÐÑо анÑи запÑÑаннÑй код.\n";
END { print "14. END блоки запÑÑкаÑÑÑÑ LIFO во вÑÐµÐ¼Ñ Ð²Ñемени вÑÑ
Ð¾Ð´Ñ Ð¸Ð· пÑогÑаммÑ.\n" }
BEGIN { print " 2. Так ÑÑо ÑÑа Ð»Ð¸Ð½Ð¸Ñ Ð²ÑÑ
Ð¾Ð´Ð¸Ñ Ð²ÑоÑой.\n" }
UNITCHECK {
print " 3. UNITCHECK блоки запÑÑкаÑÑÑÑ LIFO поÑле Ñого, как каждÑй Ñайл оÑкомпилиÑÑеÑÑÑ.\n"
}
INIT { print " 9. ÐÑ ÑÑÐ°Ð·Ñ ÑвидиÑе ÑазниÑÑ.\n" }
print "13. ÐÑо пÑоÑÑо _вÑглÑдиÑ_ Ñак, как она должна бÑÑÑ Ð·Ð°Ð¿ÑÑаннÑм. (It merely _looks_ like it should be confusing.)\n";
__END__
=head2 Perl ÐлаÑÑÑ
X<class> X<@ISA>
Ðе ÑÑÑеÑÑвÑÐµÑ ÑпеÑиалÑного ÑинÑакÑиÑа клаÑÑа в Perl, но Ð¿Ð°ÐºÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð´ÐµÐ¹ÑÑвоваÑÑ
как клаÑÑ, еÑли он пÑедоÑÑавлÑÐµÑ Ð¿Ð¾Ð´Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð² каÑеÑÑве меÑодов. Такие
пакеÑÑ Ð¼Ð¾Ð³ÑÑ Ñакже пÑедоÑÑавиÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе из меÑодов его Ð¾Ñ Ð´ÑÑгого клаÑÑа (пакеÑа)
пеÑеÑиÑлÑÑ Ð´ÑÑгие имена пакеÑа в глобалÑной маÑÑиве @ISA (коÑоÑÑй
должен бÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑм пакеÑом, не локалÑнÑм (package global, not a lexical)).
ÐодÑобнее об ÑÑом Ñм. L<perlootut> и L<perlobj>.
=head2 Perl ÐодÑли
X<module>
ÐодÑÐ»Ñ ÑÑо пÑоÑÑо Ð½Ð°Ð±Ð¾Ñ ÑвÑзаннÑÑ
ÑÑнкÑий в Ñайле библиоÑеки, Ñ.е.
Perl Ð¿Ð°ÐºÐµÑ Ñ Ñем же именем, ÑÑо и Ñайл. Ðн ÑпеÑиалÑно
пÑедназнаÑен Ð´Ð»Ñ Ð¿Ð¾Ð²ÑоÑного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² дÑÑгиÑ
модÑлÑÑ
или пÑогÑамм. Ðн Ð¼Ð¾Ð¶ÐµÑ ÑделаÑÑ ÑÑо
пÑедоÑÑавлÑÑ Ð¼ÐµÑ
анизм Ð´Ð»Ñ ÑкÑпоÑÑа некоÑоÑÑÑ
из его Ñимволов в
ÑаблиÑÑ Ñимволов лÑбого пакеÑа, коÑÑÑй его иÑполÑзÑеÑ, или он Ð¼Ð¾Ð¶ÐµÑ ÑÑнкÑиониÑоваÑÑ ÐºÐ°Ðº опÑеделение клаÑÑа
и ÑделаÑÑ Ð´Ð¾ÑÑÑпнÑм ÑÐ²Ð¾Ñ ÑеманÑÐ¸ÐºÑ Ð½ÐµÑвно ÑеÑез
вÑÐ·Ð¾Ð²Ñ Ð¼ÐµÑодов в клаÑÑе и его обÑекÑÑ, без Ñвного
ÑкÑпоÑÑ Ð¿ÑоÑедÑÑ. Ðли он Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ Ñем и дÑÑгим.
ÐапÑÐ¸Ð¼ÐµÑ ÑÑÐ¾Ð±Ñ Ð½Ð°ÑаÑÑ ÑÑадиÑионнÑй, не-OO модÑÐ»Ñ Ð¿Ð¾Ð´ названием Some::Module,
ÑоздайÑе Ñайл Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ F<Some/Module.pm> и наÑниÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑого Ñаблона:
package Some::Module; # assumes Some/Module.pm
use strict;
use warnings;
BEGIN {
require Exporter;
# set the version for version checking
our $VERSION = 1.00;
# Inherit from Exporter to export functions and variables
our @ISA = qw(Exporter);
# Functions and variables which are exported by default
our @EXPORT = qw(func1 func2);
# Functions and variables which can be optionally exported
our @EXPORT_OK = qw($Var1 %Hashit func3);
}
# exported package globals go here
our $Var1 = '';
our %Hashit = ();
# non-exported package globals go here
# (they are still accessible as $Some::Module::stuff)
( run in 1.126 second using v1.01-cache-2.11-cpan-39bf76dae61 )