The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Функции и модули в Perl

   Корень / Программисту и web-разработчику / Perl / Функции и модули в Perl

----* Развертывание локального Perl-репозитория CPAN (доп. ссылка 1)   Автор: xenos8  [комментарии]
  Инструкция по созданию локального репозитория Perl-модулей, записанных на переносной носитель.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как в Perl перехватить __DIE__, чтобы это не отразилось на die() внутри eval (доп. ссылка 1)   [обсудить]
  Если в скрипте используется свой обработчик $SIG{__DIE__}, то он отработает и для die() внутри eval блока.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как интегрировать функцию написанную на C/C++ в Perl скрипт. (доп. ссылка 1)   [обсудить]
 
Простой путь: use Inline::C, use Inline::CPP (есть также модуль Inline::ASM)
Более сложный путь: perldoc perlxs, perldoc perlxstut
 
----* Как получить список всех установленных Perl модулей и их версий (доп. ссылка 1)   [обсудить]
 
use ExtUtils::Installed;
$installed = ExtUtils::Installed->new();
foreach $module ($installed->modules()){
    printf "Module: %s\t\tVersion: %s\n", $module, $installed->version($module);
}
 
----* Как выполнить в Perl свой код перед аварийным завершением по die().   [обсудить]
 
sub die_sig{
    # Случай вызова die в eval блоке.
    die @_ if $^S;
    # Удаляем лок.
    unlink("$cfg_lock_file");
}
local ($SIG{__DIE__}) = \&die_sig;
 
----* Как получить имена подпрограмм Perl модуля (доп. ссылка 1)   Автор: whirlwind.ru  [обсудить]
 
print join("\n",&get_sub_list);
sub go{}
sub test1{}
package sublist;
sub main::get_sub_list{
	no warnings;
	my ($code,@fn);
	foreach (keys(%main::)){
		next unless /^[\w_]/;
		push(@fn,$_) if eval("defined(*main::$_"."{CODE})");
	}
	use warnings;
	@fn
}
 
----* Выполнение функции по ссылке или определенную как строка   [обсудить]
 
$func_link = sub {.......};
&$func_link(1,2,3);
test_func sub{.....};
%arr= ("test" => \&test_func);
$arr{"test"}=>(1,2,3);
$func_str = "print 'test'";
eval("$func_str");
 
----* Как вызвать функцию внутри строки   [обсудить]
 
print "текст @{[test_func()]} текст";
 
----* Как передать файловый дескриптор в качестве параметра функции   [обсудить]
 
sub test{
	my $handle = shift;
	while (<$handle>){
		.....
	};
        print {$handle} "test\n";
}
open (FH, "<file");
flock(FH, 1);
test(*FH);
                                                  
 
----* Как создать модуль и экпортировать переменные   [обсудить]
 
package Test;
use Exporter;
@ISA = ('Exporter');
@EXPORT_OK = ('test_func');
sub test_func {
......
}
1;
 
----* Как поставить обработчик вызываемый при аварийном завершении скрипта   [обсудить]
 
sub my_die{
.....
}
local ($SIG{__DIE__}) = \&my_die;
local ($SIG{__WARN__}) = \&my_warn;
local ($SIG{INT}) = \&my_kill;
local ($SIG{TERM}) = \&my_kill;
die "test";
 

 Версия для печати




  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor TopList