Exporter
package Local::Multiplier;
use Exporter 'import';
our @EXPORT = qw(m2 m3 m4 m5 m6);
sub m2 { shift() ** 2 }
sub m3 { shift() ** 3 }
sub m4 { shift() ** 4 }
sub m5 { shift() ** 5 }
sub m6 { shift() ** 6 }
use Local::Multiplier;
print m3(5); # 125
print Local::Multiplier::m3(5); # 125
25 / 68
Slide 26
Slide 26 text
Exporter — EXPORT_OK
package Local::Multiplier;
use Exporter 'import';
our @EXPORT_OK = qw(m2 m3 m4 m5 m6);
sub m2 { shift() ** 2 }
sub m3 { shift() ** 3 }
sub m4 { shift() ** 4 }
sub m5 { shift() ** 5 }
sub m6 { shift() ** 6 }
use Local::Multiplier qw(m3);
print m3(5); # 125
print Local::Multiplier::m4(5); # 625
26 / 68
Slide 27
Slide 27 text
%EXPORT_TAGS
our %EXPORT_TAGS = (
odd => [qw(m3 m5)],
even => [qw(m2 m4 m6)],
all => [qw(m2 m3 m4 m5 m6)],
);
use Local::Multiplier qw(:odd);
print m3(5);
27 / 68
Slide 28
Slide 28 text
import()
Не зарезервированное слово
Не обязан экспортировать функции пакета
Не обязан экспортировать в принципе
$ perl -e 'Lol->import();'
$ perl -e 'Lol->method();'
Can't locate object method "method" via package "Lol"
(perhaps you forgot to load "Lol"?) at -e line 1.
28 / 68
Slide 29
Slide 29 text
Импорт? (Итого)
use Some::Module qw(some_function);
some_function('...');
package Some::Module;
use Exporter 'import';
our @EXPORT = qw(some_function);
sub some_function {}
29 / 68
Slide 30
Slide 30 text
Контроль версий?
$ perl -we 'use File::Path qw(make_path);'
"make_path" is not exported by the File::Path module
Can't continue after import errors at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
use File::Path 2.00 qw(make_path);
30 / 68
Slide 31
Slide 31 text
use Module VERSION;
package Local::Module;
our $VERSION = 1.4;
use Local::Module 1.5;
$ perl -e 'use Data::Dumper 500'
Data::Dumper version 500 required--
this is only version 2.130_02 at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
31 / 68
Slide 32
Slide 32 text
sub VERSION
use Local::Module 500;
# Local::Module->VERSION(500);
# ~ Local::Module::VERSION('Local::Module', 500);
package Local::Module;
sub VERSION {
my ($package, $version) = @_;
# ...
}
32 / 68
use VERSION;
use 5.12.1;
use 5.012_001;
$^V # v5.12.1
$] # 5.012001
34 / 68
Slide 35
Slide 35 text
Контроль версий? (Итого)
use Module v1.1.1;
use 5.10;
35 / 68
Slide 36
Slide 36 text
Pragmatic modules
use strict;
use warnings;
36 / 68
Slide 37
Slide 37 text
use strict 'refs';
use strict 'refs';
$ref = \$foo;
print $$ref; # ok
$ref = "foo";
print $$ref; # runtime error; normally ok
37 / 68
Slide 38
Slide 38 text
use strict 'vars';
use strict 'vars';
$Module::a;
my $x = 4;
our $y = 5;
38 / 68
Slide 39
Slide 39 text
use strict 'subs';
use strict 'subs';
print Dumper [test]; # 'test'
sub test {
return 'str';
}
print Dumper [test]; # 'str'
39 / 68
Slide 40
Slide 40 text
use warnings
use warings;
use warnings 'deprecated';
$ perl -e 'use warnings; print(5+"a")'
Argument "a" isn't numeric in addition (+) at -e line 1.
$ perl -we 'print(5+"a")'
Argument "a" isn't numeric in addition (+) at -e line 1.
40 / 68
Slide 41
Slide 41 text
use diagnostics;
use diagnostics;
$ perl -e 'use diagnostics; print(5+"a")'
Argument "a" isn't numeric in addition (+) at -e line 1 (#
(W numeric) The indicated string was fed as an argumen
that expected a numeric value instead. If you're fort
will identify which operator was so unfortunate.
41 / 68
Slide 42
Slide 42 text
use lib;
use lib qw(/tmp/lib);
BEGIN { unshift(@INC, '/tmp/lib') }
42 / 68
Slide 43
Slide 43 text
FindBin
use FindBin '$Bin';
use lib "$Bin/../lib";
43 / 68
Slide 44
Slide 44 text
use feautre;
use feature qw(say);
say 'New line follows this';
44 / 68
Slide 45
Slide 45 text
use bignum;
use bignum;
use bigint;
use bigrat;
$ perl -E 'use bigint; say 500**50'
8881784197001252323389053344726562500000000000000000000000
$ perl -E 'say 500**50'
8.88178419700125e+134
45 / 68
Slide 46
Slide 46 text
Pragmatic modules (Итого)
package Some::Module;
use strict;
use warnings;
1;
46 / 68
Slide 47
Slide 47 text
no
no Local::Module LIST;
# Local::Module->unimport(LIST);
no 5.010;
no strict;
no feature;
47 / 68
Slide 48
Slide 48 text
Как работает экспорт?
Как копируются функции?
Как
Exporter узнает, куда их копировать?
48 / 68
local — варианты
# localization of values
local $foo;
local (@wid, %get);
local $foo = "flurp";
local @oof = @bar;
local $hash{key} = "val";
delete local $hash{key};
local ($cond ? $v1 : $v2);
# localization of symbols
local *FH;
local *merlyn = *randal;
local *merlyn = 'randal';
local *merlyn = \$randal;
55 / 68
Slide 56
Slide 56 text
CPAN
The Comprehensive Perl Archive Network
http://cpan.org
56 / 68
Slide 57
Slide 57 text
Metacpan
http://metacpan.org
57 / 68
Slide 58
Slide 58 text
Установка из пакета в Debian
$ apt-cache search libjson-perl
libjson-perl - module for manipulating
JSON-formatted data
libjson-pp-perl - module for manipulating
JSON-formatted data (Pure Perl)
libjson-xs-perl - module for manipulating
JSON-formatted data (C/XS-accelerated)
# apt-get install libjson-perl
58 / 68
Slide 59
Slide 59 text
Установка из пакета в CentOS
$ yum search perl-json
======================== Matched: perl-json =============
perl-JSON-XS.x86_64 : JSON serialising/deserialising,
done correctly and fast
perl-JSON.noarch : Parse and convert to JSON
(JavaScript Object Notation)
perl-JSON-PP.noarch : JSON::XS compatible pure-Perl modul
$ yum install perl-JSON-XS
59 / 68
Slide 60
Slide 60 text
Утилита cpan
$ cpan
Terminal does not support AddHistory.
cpan shell -- CPAN exploration and modules installation (
Enter 'h' for help.
$ cpan install JSON
perl -MCPAN -e shell
60 / 68