« 前のひとこと | トップページ | 次のひとこと »

cocolog:87302261

no autovivification qw(strict warnings ...) がおかしい。Perl 5.10.x で使っていて大丈夫だったのが Perl 5.22.x (Perl 5.2x?) でダメになってる。 (JRF 0809)

JRF 2017年4月29日 (土)

すごい簡単なコード、次のようなのが、Cygwin の Perl 5.10.1 & autovivification 0.12 では通るのに、ActivePerl の Perl 5.22.1 & autovivification 0.16 では通らない。tmp.pl を次のようにする。

JRF2017/4/291348

<pre>
no autovivification qw(strict warn fetch exists delete store);

my %x;
if (exists $x{"n"}) {
print "OK\n";
}
</pre>

JRF2017/4/296736

これの Perl 5.10.1 での実行結果は、何も表示されない。Perl 5.22.1 での実行結果は、

<pre>
Reference vivification forbidden at tmp.pl line 4.
</pre>

…になる。

JRF2017/4/298156

バージョンが変わって、こういう動作になったということかな?

JRF2017/4/293081

もちろん、次のようなコードだと…

<pre>
no autovivification qw(strict warn fetch exists delete store);

my %x;
if (exists $x{"m"}->{"n"}) {
print "OK\n";
}
</pre>

JRF2017/4/299337

Perl 5.10 でも Perl 5.22 でも次のように表示されるのは思い通りの動作なんだけど…。

<pre>
Reference vivification forbidden at tmp.pl line 4.
</pre>

JRF2017/4/292206

何かおかしい。

最初のでエラーが出るのが意図した動作なのだろうか?

しかたないので、リリースのときだけ、no autovivification をコメントアウトするようにした。

JRF2017/4/291380

……。

あと、Perl 5.10 と Perl 5.22 の違いではまったのは、Perl 5.10 では大丈夫な次のようなコードが Perl 5.22 ではダメだったこと。 tmp.pl を次のようにする。

<pre>
foreach my $x qw(a b c) {
print "$x\n";
}
</pre>

JRF2017/4/299934

これが Perl 5.22 では…

<pre>
syntax error at tmp.pl line 1, near "$x qw(a b c)"
Execution of tmp.pl aborted due to compilation errors.
</pre>

…になる。

JRF2017/4/291137

ちなみにエラーメッセージもわかりにくくて

<pre>
foreach my $x qw(a b
c) {
print "$x\n";
}
</pre>

…とすると、

JRF2017/4/294907

<pre>
syntax error at tmp.pl line 2, near "c)"
(Might be a runaway multi-line () string starting on line 1)
Execution of tmp.pl aborted due to compilation errors.
</pre>

…と表示される。

JRF2017/4/291780

ちなみに、次のように foreach のあとにいきなり qw がこなければ OK。

<pre>
foreach my $x (qw(a b c)) {
print "$x\n";
}
</pre>

…とすると、

JRF2017/4/298145

<pre>
a
b
c

</pre>

…とちゃんと表示される。

JRF2017/4/299731

……。

追記。

Ubuntu 16.04 の perl 5.22 & autovivification 0.16 で試してみた。

結果、Active Perl 5.22 + autovivification 0.16 と同じ結果だった。ちなみに ActivePerl 5.24 + autovivification 0.16 でも同じ結果だった。

…バグだと思う。報告しようと思ったが、報告のページを見るとメールアドレスがほとんど公開されてしまうようなので、怖くて報告を出せない。

JRF2017/5/217783

« 前のひとこと | トップページ | 次のひとこと »

トラックバック


トラックバックのポリシー

他サイトなどからこの記事に自薦された関連記事(トラックバック)の一覧です。

» cocolog:87304791 from JRF のひとこと

quail-naggy.el と jrf_semaphore.pl をアップデートした。そららが共通している naggy-backend.pl のブラッシュアップが大きな変更点。 続きを読む

受信: 2017-06-28 19:14:53 (JST)