【Perl】use 5.12.0 !!


小ネタ。5.10.0 以降いくつかの予約語が追加されたが、互換性のために標準では有効になっていない。

#!/usr/bin/perl
use utf8;
use strict;
use warnings;
binmode STDOUT => ":utf8";

# say は使えない
say "Hello, World!";
# でも Defined-or 演算子はエラーにならない
my $t = undef // "未定義です!";

実行例

$ perl testSay.pl
String found where operator expected at testSay.pl line 8, near "say "Hello, World!""
(Do you need to predeclare say?)
syntax error at testSay.pl line 8, near "say "Hello, World!""
Execution of testSay.pl aborted due to compilation errors.

そこで使う度に use feature 表記を追加する必要があった。

#!/usr/bin/perl
use utf8;
use strict;
use warnings;
# ↓ use 5.10.0; でも代用可能
use feature qw! say switch state !;
binmode STDOUT => ":utf8";

say "メンドイ!";

これが 5.12.0 になってちょっぴり改善されていた。use 5.12.0 という構文により、全ての新機能と use strict 文が追加されたのと同じ効果が得られる。

#!/usr/bin/perl
use utf8;
use 5.12.0;
use warnings;
binmode STDOUT => ":utf8";

say "ちょっとだけ楽になった";
say undef // "未定義です!" # Defined-or 演算子
... # ヤダヤダ演算子もおk

いっそのこと utf8warnings も有効にして欲しかったのだが……。

ヤダヤダ演算子、他、Perl 5.12 の新機能 | blog.delphinus.dev
https://blog.delphinus.dev/2010/04/yada-yada-operator-and-others.html

コメントを残す