about perl5.10
DESCRIPTION
Kansai.pm Meeting #9TRANSCRIPT
Perlの歴史
• 1987 1.0
• 1988 2.0
• 1989 3.0
• 1991 4.0
• 1994 5.0
22
Perl5の歴史
• 1994 5.0
• (略
• 2000 5.6
• 2002 5.8
• 2007 5.10
33
Perl5.10.0
• 2007/12/18 リリース
44
今日の内容• Perl5.10
• 後方互換性
• 追加された機能
• ……の一部紹介(全部はムリ)
55
すべてを知りたいなら• perldoc perl5100delta
• 和訳
• http://fleur.hio.jp/perldoc/mix/pod/perl5100delta.mix.html
66
活字で読みたい
• Recent Perl World#12 / ITO NaoyaWEB+DB PRESS Vol.43
77
今日の結論• リリースからもうすぐ半年
• 5.10コワクナイヨ
• もっと使っていきましょう
88
99
後方互換性
1010
後方互換性
• Perlのいままでのバージョンと同様に極力後方互換性を維持している
1111
互換のない修正
• pack()/unpack()でutf-8エンコードされた文字列の処理変更
• 疑似ハッシュの廃止
• warningsプラグマがCarpをロードしなくなった
• etc...
1212
追加された機能
1313
featureプラグマ
1414
featureプラグマ• 後方互換性のない新しい構文を有効にするた
めのプラグマ
• レキシカルスコープ
1515
featureプラグマ• say
• switch
• state
1616
featureプラグマ
use feature ’say’;
1717
featureプラグマ
use feature qw(say switch state);
1818
featureプラグマ
use feature qw(:5.10);
• すべての機能が有効になる
1919
featureプラグマ
use 5.10;
• featureプラグマが暗黙的にロードされる
2020
featureプラグマ
use feature qw(say switch state); use feature qw(:5.10);use 5.10;
2121
新しいコマンドラインスイッチ
2222
one-liner
• one-liner用コマンドラインスイッチ
• いままでも -e があるよね?
2323
-eスイッチ
% perl -e 'print "hello, world!\n"'
2424
-Eスイッチ
% perl -E 'say "hallo, perl5.10!"'
2525
-Eスイッチ
• one-liner用のコマンドラインスイッチ
• perl5.10の機能を有効にして実行
2626
27
say
2828
Say
• 改行付きprint
2929
print "Hello, world!\n"
3030
Say
say 'Hello, world!'
3131
print "$_\n" for @lines;
3232
Say
say for @lines;
3333
switch
3434
switch
• Perlにもswitch文が!
• ただし構文はswitch/caseではなくgiven/when
3535
given/whenuse feature 'switch';given ($foo) { when (/^abc/) { $abc = 1; } when (/^def/) { $def = 1; } when (/^xyz/) { $xyz = 1; } default { $not = 1; }}
3636
for/whenuse feature 'switch';for (@foo) { when (/^abc/) { $abc = 1; } when (/^def/) { $def = 1; } when (/^xyz/) { $xyz = 1; } default { $not = 1; }}
3737
smart match
3838
~~
3939
smart match
• 比較対象によって比較の方法が変わる
• whenでもスマートマッチが行われる
• 単独で使う場合は~~
• 詳しくはperldoc perlsynで
4040
state
4141
state変数• my local ourに続く変数宣言 state
• 変数宣言時に一度だけ初期化される変数
• スコープはブロックの範囲内
4242
クロージャ• クロージャを使って書いていた処理を
{ my $i = 0; sub func { $i++ }}
4343
state変数• すっきりかける
use feature 'state';sub func { state $i = 0; $i++;}
4444
45
//46
46
dor
4747
Defined-or
4848
Defined-or
• こう書いていたのが
defined $a ? $a : $b
4949
Defined-or
• こう書けます
$a // $b
5050
//の優先度• || とまったくいっしょ
• 低優先度版のerr演算子はなくなりました
5151
named capture
5252
named capture
• 正規表現で名前付きでキャプチャできる
• 構文は(?<NAME>)
• \k<NAME> で後方参照可能
• キャプチャした内容には%+ハッシュでアクセス可能
5353
named capture
54
s/(?<letter>.)\k<letter>/$+{letter}/g
54
ファイルテスト演算子
5555
ファイルテスト演算子
-x $file && -w _ && -f _
5656
ファイルテスト演算子• まとめて書けるように
-f -w -x $file
5757
……他にもいろいろあります
5858
• 宣言することで$_をレキシカルに
• mroプラグマ
• UNIVERSAL::DOES()
• no VERSIONで指定したバージョンより古いPerlを使いたいことを表現
• %^H でレキシカルプラグマを実装可能に
5959
新しいコアモジュール
6060
• encoding::warnings
• Module::CoreList
• Math::BigInt::FastCalc
• Compress::Zlib
• IO::Zlib
• Archive::Tar
• Digest::SHA
• ExtUtils::CBuilder
• ExtUtils::ParseXS
• Hash::Util::FieldHash
• Module::Build
• Module::Load
• Module::Loaded
• Package::Constants
• Win32API::File
• Locale::Maketext::Simple
• Params::Check
• Term::UI
• Object::Accessor
• Module::Pluggable
• Module::Load::Conditiona
• Time::Piece
• IPC::Cmd
• File::Fetch
• Log::Message
• Log::Message::Simple
• Archive::Extract
• CPANPLUS
• Pod::Escapes
• Pod::Simple6161
Perl5.10を使うには
6262
Perl5.10を使うには
• fedora9は5.10
• debian(sid)は5.10になったようです
• MacPortsにもperl5.10あります
• ActivePerlも5.10
• いっそソースからインストール
6363
まとめ
6464
Perl5.10はふつうに使えそう
6565
早速インストール!
6666
ご静聴ありがとうございました
6767
questions?
6868
参考資料
• perl5100deltahttp://fleur.hio.jp/perldoc/perl/5.10.0/pod/perl5100delta.mix.html
• What's new in Perl 5.10?http://www.slideshare.net/acme/whats-new-in-perl-510
• Recent Perl World#12 / ITO NaoyaWEB+DB PRESS Vol.43
6969