hns - 日記自動生成システム - Version 2.19.9

先月 2007年09月 来月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
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 では、(: を付けなくても) 並べて書いた全ての文字に引数をとる。
関数引数の例その時の動作名前の覚え方
getopt'r'-r hoge の hoge が $opt_r に入る方法が一つだけなので単数形
getopts'ari:'-a や -r は、有無で $opt_a や $opt_r に 1 か 0、i: のようにコロンを付けると、-i foo の foo が $opt_i に入る二つの方式 (: の有無)があるので複数形
このようにして getopt() や getopts() は変数 $opt_文字 に値が代入される。で、 もう一つの使い方として hash の %opts 変数 を使うことも可能。
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);
の宣言を書くことで期待通り動くようになる。



最近の日記
2024年05月08日
comparison on ./buildsh tools
2024年05月06日
py-setuptools (python 3.11.9)
make release took 1 hours and 10 min
qemu invocation for 10.99.10
2024年05月05日
Windows 10 version
serial connection
bc bench
2024年05月04日
Trial on 10.99.10
another version (later trial) to succeed
2024年04月29日
dkim
以上、1 日分です。
タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project

Count.cgi (since 2000/02/05)