8

マシンに5.14.2をインストールしていますが、sayキーワードを指定してprintステートメントを実行しようとすると、エラーが発生します。

プログラムをエラーなしで実行するために、useキーワードを使用しました。

#!/usr/bin/perl
use feature ':5.10';
say "hello";

5.14.2は5.010と比較すると最新なので、これらの機能はすべてデフォルトで有効になっているはずですよね?useでは、キーワードを使ってバージョンを指定する意味は何ですか?

4

2 に答える 2

10

Perl は下位互換性を維持しようとします。既存のスクリプトに という名前のサブルーチンがある可能性は十分にありsayます。Perl の将来のバージョンでこれらの取り組みを中止し、内部を簡素化する必要があるかどうかについて、かなりの進行中の議論があります。たとえば、perl の命名と番号付けを参照してください。

于 2013-02-24T16:39:09.760 に答える
5

Perl で書かれた既存のプログラムとの競合を防ぎます。

たとえば、Perl 5.6 用のプログラムを書いて、 というサブルーチンを定義したとしsayます。

use strict;
use warnings;
sub say { print 1; }
say();

これは正常に動作し ( 1を出力)、この機能を含む perl でも動作しsayます。

それでは、ネイティブを有効にして、何が起こるか見てみましょうsay:

use v5.14;
use strict;
use warnings;
sub say { print 1; }
say();

今度は、* Use of uninitialized value $_ in say at - line 5.* でフォールオーバーします。

新しい機能を安全にロードできるようにする必要があります。use featureつまり、作成者がそれらを使用したいことを知っている場合です。use v5.xx

于 2013-02-24T16:36:49.150 に答える