|
Namazu for hns による簡易全文検索 詳しくは 詳細指定/ヘルプを参照して下さい |
||||||||||||||||||||||||||||||||||||||||||||||||||
2007年09月09日(日) 旧暦 [n年日記] [更新:"2007/09/12 09:50:57"]#1 [Perl] Getopt::Std の使い方 (use strict)
以前にも
ちょっと書いた
ことがある Getopt::Std; の使い方の話。まず話がそれるが、
Emacs か vi かという話があって、それと(僕は)似た話だと思うが、
Perl 手続を書く時に、
use strict; を使う
か使わないかがある気がする。
どのような時でも
use strict; を使う
と決めているとすると、その
Getopt::Std で少し悩むかも知れない。( 参考: perldoc Getopt::Std)
use strict; use Getopt::Std;と書いた時の話。まず、use strict; の有無に関係ない話として、 その時に使えるようになる二つの関数の getopt() と getopts() の違い。 はじめの getopt('r'); は r に引数をとる。 ./test-script -r 2の 2 が $opt_r に入る。一方二つ目の getopts('r') は r に引数をとらない。 getopts() の方で引数をとるようにするには getopts('r:') と書く。 初めの方の getopt では、(: を付けなくても) 並べて書いた全ての文字に引数をとる。
getopts('r', \%opts);のようにしておくと %opts の $opts{'r'} に値が入る。 単数形の getopt の方が指定方法が一通り。 複数形の getopts は指定方法に二つあると覚えるのかな。 で、ここまでは use strict; とは関係なくどちらでも同じ。 @ use strict;:
use strict; と一緒に使う場合には、そのままだと、例えば $opt_r が宣言されて
いないと言われる。
Global symbol "$opt_r" requires explicit package name at hoge line xx.それで、使うものに応じて、次のような宣言を書いておく。 our(%opts); our($opt_r);%opts 方式が良いのは、全ての文字について our を書かなくても良く、一つで済むいということ。 ちなみに our は大域変数 (global variable)宣言。 つっこみをいただきましたが、%opts が良いのは、my(%opts) で済むこと(らしい)です。 ありがとうございます。 @ @ARGV に与えた引数が入らない:
更にもう一点注意が必要、それは @ARGV。何も考えないと、特に問題が表示されないで
「@ARGV に与えた引数が入らない」
変だなぁ、となる。これは
our(@ARGV);の宣言を書くことで期待通り動くようになる。 ( つっこみ )
|
最近の日記 2025年02月13日 ・dvipdfmx ICC profile format spec. version 4.3.0 2025年01月29日 ・ham/wsjtx 2025年01月27日 ・wip/wsjtx 5.4.2 2025年01月25日 ・ham/wsjtx 2025年01月15日 ・今更 advent calendar | ||||||||||||||