perl5.22 おれの注目 features(changes)
perl5.22 が登場したということで一通り Changes 読んでみた上で気になった点を列挙しておく。
キャプチャしない正規表現オプション n
Non-Capturing Regular Expression Flag
正規表現に n オプションというのが加わったようだ。これまでは (?:nocapture)
というように ?:
を使っていたのが、/(nocapture)/n
という風に n オプションで明示できる。これで ?: だか :? だか迷う必要がなくなった!
Unicode 7.0 対応
Unicode 7.0 is supported
ロシア通貨のルーブルの通貨記号文字が使えるってことですね!
無限大や数値ではない引数を渡すと、死ぬ
Packing infinity or not-a-number into a character is now fatal
chr("foo")
これがエラーになるようになるらしい。そもそも文字列渡してるのがおかしいのだけど、これまでの落ちない挙動に依存してると perl5.22 からは落ちるようになる(「Cannot chr %f」と言われる)。
リストスライスの挙動が変わる
List slices returning empty lists
元のリストのインデックスの外を指定する場合に、空リストが返ってたのが undef が返るようになるらしい。とりあえず自分はスライスをあんま使わないのであれなんですけど、このスレッド がドラマチックで感激した。
正規表現の x 演算子を指定した場合に Unicode のいくつかの文字についてよしなになった
qr/foo/x now ignores all Unicode pattern white space
以下の文字が /x で半角スペース同等に扱ってもらえるようになった(つまり無視)。
U+0085 NEXT LINE
U+200E LEFT-TO-RIGHT MARK
U+200F RIGHT-TO-LEFT MARK
U+2028 LINE SEPARATOR
U+2029 PARAGRAPH SEPARATOR
Unicode 的 "みなし空白" のリストってどこかにリソースあったりするんだっけ。
$! に non-ascii が含まれると UTF-8 flag がついてくる
"$!" text will be returned in UTF-8 when appropriate
え!!!(めんどい、、)
HASH と ARRAY をリファレンスとして扱うと死ぬ
Using a hash or an array as a reference are now fatal errors
%foo->{"bar"}
はだめってこと。ありがたい!!(「Can't use a hash as a reference」というエラーが新設されている)
warnings を fatal にすんな
Making all warnings fatal is discouraged
use warnings FATAL => 'all'
すると warnings 出た時点で死ぬというドがつくマゾ指定があるわけですが、これが非推奨になりました。個人的に脅迫プラグマと呼んでおりましたので、非推奨になってほっとしています。まじこういうのでプロダクト落とすのやめましょう。Test::Warnings でやりましょう。
CGI と Module::Build がコアから外れた
CGI 生まれ CGI 育ち、HTTPヘッダとクエリパースするコード書いたことあるやつはみんな友達。
perlunicook
Perl で Unicode を扱うためのドキュメント perlunicook が書かれている。サンプルコードが多めでわかりやすい。metacpan の Unicode 対応++
close に失敗したときの $! が改善してる
close now sets $!
close $fh or die $!
してた場合に、$! が信頼あるものになったそうだ。
s/// で長い文字列を扱っても死なない
s///g now works on very long strings (where there are more than 2 billion iterations) instead of dying with 'Substitution loop'
2 billion iterations !!!
内部的にどう扱って実現してるか気になる。
まとめ
Shibuya.pm 楽しかったです。メモりながら delta 読んでたら2時間たってた。OMG