use VERSIONをする必要があった話
前回、非破壊置換修飾子(/r
オプション)が便利って書いたけど、
これは、v5.14から入った機能なので、
Perlがv5.14未満の場合は実行できないようにしたい。
そういや、use VERSION
って、
どっかのタイミングで意味が変わったんじゃなかったっけ?って思って、
改めて調べてみることにしました。
ここを読む限り、
指定したバージョンより古いPerlで実行すると例外が発生するようです。
他にも、指定したバージョンで使えるすべての機能が有効になるので、
自分の場合はsay
を使うために、use v5.10;
って書いてました。
例えば、このコード。
use v5.14; use strict; use warnings; my @foo = qw/a b c/; my @bar = map { s/[abc]/x/r; } @foo; say join(',', @foo), ' >>> ', join(',', @bar);
perlbrewをoffにして、Perl v5.12の環境で実行してみます。
$ perlbrew off
$ perl aaa.pl
Perl v5.14.0 required--this is only v5.12.4, stopped at aaa.pl line 1.
BEGIN failed--compilation aborted at aaa.pl line 1.
Perlのバージョンが古いから停止した旨が出力されました。
次に、1行目をuse v5.10;
に書き換えて実行してみます。
$ perl aaa.pl
Bareword found where operator expected at aaa.pl line 6, near "s/[abc]/x/r"
syntax error at aaa.pl line 6, near "s/[abc]/x/r"
Execution of aaa.pl aborted due to compilation errors.
これだと、あれ?なんで???ってな感じでハマりますね。
という訳なので、今後はuse v5.14;
って書いていこうと思います。
v5.14未満の環境の人、ゴメンなさい!
おしまい。
Leave a Comment