• ベストアンサー

BEGIN{}での変数宣言

'perl'では変数の有効範囲について、'c' と考えかたが違うようですが、違和感があります。 1000行を超えるような'perl'で、随処で頻繁に使うような重要なグローバル変数では、BEGIN 内で明示的に宣言したほうが、引き継いだひとにも親切にかんじるのですが、みなさんはどうお感じになりますか? 'perl'を作られたかたは、'c'の自動変数を'my'で、'extern'を宣言不要という思想でつくられたのでしょうか? (2回目の質問です。変な質問でしたら、ごめんなさい<ToT>)

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>'use vars' は、エラーになってしまいました。 ちょっとしたサンプルを作ってみました。 参考になりますか? ---------------------------------------------------------------- use strict; use vars qw(@array); #大域変数の宣言 sub fileIn($){ my $fileName = shift; open(my $in, "<", $fileName); @array=<$in>; close($in); } fileIn("Sample.pl"); my $count = 0; foreach my $aLine (@array){ printf "%05d:%s", ++$count, $aLine; }

jikenjp
質問者

お礼

ありがとうございます。親切なご解答、おそれいります。私の本、ボロくて、下記の記述、どこにもありません。 use strict 'vars'; いろいろ、実験してすべて'OK'です。 (ちなみに、秀和システムの本ですが、二度とこの出版社の本は、買わないと思います。)

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

そもそも最初は「ローカル変数」なんて概念はなかったです. my は Perl 5 で追加されたものだし. Practical Extract and Report Language なので, 本格的なプログラム言語として使う意図はなかったのかも.

jikenjp
質問者

お礼

ありがとうございました。 "perl" が 'Practical Extract and Report Language' の略って始めて知りました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

Perl で明示的なグローバル変数を作るには our や use vars を使って作成(明示的に宣言)できます。 どちらかというと、use vars が宣言したって感じがするような気がします。 設計思想についてはわかりませんが、 デフォルトが大域変数になるというのは、 いわゆるワンライナーのようなちょっとしたプログラムを書く時に、いちいち変数宣言をしなくても使えると良い(そうでないと煩わしい)というようなことなんじゃないでしょうか。

jikenjp
質問者

お礼

ありがとうございます。いつも楽しくご解答を拝見させて戴いております。 アクセスログの解析で、2次元配列にため込んでから、 'END' 文で、'カウント & ソート(アクセスの多い順とか)'の 'perl' を 作りました。 が、2次元配列(グローバルの)を、どこで、どう宣言するとスマートなのかなと思い 質問いたしたしだいです。 ('our' は理解できましたが、'use vars' は、エラーになってしまいました。)

関連するQ&A