web-dev-qa-db-ja.com

二重矢印(=>)演算子はPerlでどのように機能しますか?

=>演算子のハッシュ使用について知っています このように

$ cat array.pl
%ages = ('Martin' => 28,
         'Sharon' => 35,
         'Rikke' => 29,);

print "Rikke is $ages{Rikke} years old\n";
$ Perl array.pl
Rikke is 29 years old
$

ハッシュを初期化するのは単なる構文だと思っていましたが、 Perlで変数をconst/finalとして修飾するにはどうすればよいですか?=>はこのように使用されています

use Readonly;
Readonly my $infilename => "input_56_12.txt";

=>は正確にはどういう意味ですか? =>を使用する方法は他にもありますか?

22
Lazer

Perlの_=>_演算子は、基本的にコンマと同じです。唯一の違いは、左側に引用符で囲まれていない単語がある場合、引用符で囲まれた単語のように扱われることです。したがって、_Martin => 28_と同じ_'Martin', 28_を書くことができます。

偶数の長さのリストからハッシュを作成できます。これは、例で行っているすべてのことです。

読み取り専用の例では、括弧を省略して、サブルーチン引数を使用したPerlの柔軟性を利用しています。 Readonly(my $infilename, "input_56_12.txt")と同等です。読み取り専用は、読み取り専用モジュールによってエクスポートされる関数であり、参照と値の2つの引数を取ります。読み取り専用の内部は、理解したい場合は別の質問に値します。

予期しない方法でコンマとして使用する例を次に示します。

_$ Perl -e 'print hello => "world\n"'
helloworld
_
36
Ben Jackson

から perlop

=>演算子はコンマの同義語ですが、文字またはアンダースコアで始まり、文字、数字、およびアンダースコアのみで構成されている場合、左側のオペランドが文字列として解釈される点が異なります

これには、演算子、定数、単一番号のv文字列、または関数呼び出しとして解釈される可能性のあるオペランドが含まれます。この動作に疑問がある場合は、左側のオペランドを明示的に引用できます。

それ以外の場合、=>演算子は、コンテキストに応じて、コンマ演算子またはリスト引数の区切り文字とまったく同じように動作します。

例えば:

use constant FOO => "something";
my %h = ( FOO => 23 );

と同等です:

my %h = ("FOO", 23);

そうではない:

my %h = ("something", 23);

=>演算子は、ハッシュ内のキーと値、およびリスト内の他のペア要素間の対応を文書化するのに役立ちます。

%hash = ( $key => $value );
login( $username => $password );

From[〜#〜] pbp [〜#〜]

Perl Best PracticesからFat Commas=>に関するいくつかの良い情報を見つけましたここでも言及するのはいいことだと思います。

ファットコンマは、次の目的のためだけに予約することをお勧めします。-

ハッシュを構築するときに使用します

my %h = ( FOO => 23 );

または、名前付き引数をサブルーチンに渡す場合、つまり、

$text = format_text({FOO => 23, BAR => 30});

または定数を作成するとき

 Readonly my $FOO => "23";

詳細については、Perlベストプラクティスの第4章:値と式(ファットコンマ)セクションを参照してください。

33
Nikhil Jain