新規記事投稿 フォロー記事投稿 記事のキャンセル
From: TAD <hotani@mxt.meshnet.or.jp>
Subject: Re: Perlで質問
Date: 1997/01/11 04:19:10
Reference: mesh.program/00150

にあさん、回答ありがとうございます。

1月10日に、にあさんは書きました。

>一般的に、手続き型言語で関数呼び出しなどをする時には、引数を値渡しする時と
>名前(参照)渡しする時があるのはご存じですよね。perl での *変数 は名前渡しに
>相当するものです。

なるほど。

>とは言え実用言語(^^;; perl のこと、普通の言語とはひと味違っています。

そこが Perl の Perl たるゆえんなんですね!? (^^)

>関数を hoge(*a, *b) と呼び出し、関数の中で local(*x, *y) = @_; と引数を
>もらうと、$x, $y は $a, $b として使えます。もちろん変更すれば反映されます。
>マップされるのは何も $a だけでなく、@a は @x として、$a{} は $x{} として、
>その他ファイルハンドルだろうが関数名だろうが何でも割り付けられます。

つまり、引数に '*a' と記述しただけで呼び出し元で名前が a というものはすべて、
呼び出された関数の中では x として使えるわけですか。な〜るほど。

例えば、
<a> というファイルハンドルを使っていたら、関数内では <x>。
(この場合 <A> というファイルハンドルは渡されないわけですよね?)
sub a {  } という関数が存在していれば、関数内では &x でその関数aを実行できる。
ということですね。

おかげさまで、だいぶ理解が深まりました。
これでうぇぶ会議室のスクリプトも全部理解できるかな?
と思ってもまだ読めないとこもあるんですよね。
う〜ん、奥が深い。 (#^_^#)