質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

1回答

1850閲覧

Perlにおける連想配列のプロトタイプについて

vprjct

総合スコア10

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

1クリップ

投稿2015/09/02 05:59

下記はハッシュのリファレンス値を表示させるプログラムです。

Perl

1use strict; 2 3my %hash = (key1=>'val1', key2=>'val2'); 4 5sub proto1(\%) { 6 foreach my $value (@_) { 7 print "$value"; 8 } 9 print "\n"; 10} 11 12my $proto2 = sub(\%) { 13 foreach my $value (@_) { 14 print "$value"; 15 } 16 print "\n"; 17}; 18 19my $proto3 = sub(%) { 20 foreach my $value (@_) { 21 print "$value"; 22 } 23 print "\n"; 24}; 25 26proto1(%hash); # HASH(0x7fe5eb010690) 27$proto2->(%hash); # key1val1key2val2 28$proto2->(\%hash); # HASH(0x7fe5eb010690) 29$proto3->(%hash); # key1val1key2val2 30$proto3->(\%hash); # HASH(0x7fe5eb010690)

proto1は思惑通りの動作となっているのですが、
proto2, 3に関して

  1. 呼び出し元引数に ¥ をつける必要があるのは何故ですか?
  2. プロトタイプの宣言が¥%と%単独で違いが生まれないのは何故ですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

サブルーチンリファレンスではプロトタイプが無効になるためです。
1),2)とも、この理由で説明ができると思います。

参考リンク:
サブルーチン (- Perl講座2部 - Perl言語仕様) | Smart

投稿2015/09/08 09:22

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問