Perlでパラメータの受け取り方
続・lsコマンドをPerlで - Perl日記
この時の後回し課題。
Perlで実行時にパラメータを引数として扱うための標準モジュールは2つあり、Getopt::StdとGetopt::Longがある。
「Perlクイックリファレンス」を見たら、次のように書かれていた。
$result = GetOptions(option-descriptions)
option-descriptionsで与えられたオプション記述に基づいて、Perlプログラムの起動時に指定されたコマンドラインオプションの取り出しと処理を行なう。各オプションは@ARGVから取り出される。GetOptionsによるオプションの処理後には、@ARGVにはオプション以外のコマンドライン引数だけが含まれていることになる。
PERLクイックリファレンス (クイックリファレンスシリーズ)
- 作者: エレンシーバー,ネイザンパトワーダン,ステファンスペインアワー,Ellen Siever,Nathan Patwardhan,Stephen Spainhour,近藤嘉雪,山本浩,台場圭一,イエローレーベル
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2000/03
- メディア: 単行本
- クリック: 8回
- この商品を含むブログ (4件) を見る
なるほど。
前回調べた時に「-a」とか「--r」とかは普通にGetopt::Std、Getopt::Longを使えば良いというところまでは分かったのだけれど、それ以外の引数の取り方が分からなかった。
つまり、
# ls.pl use Getopt::Std; getopt('x', \%opts); print $opt{x}, "\n"; # -------------------- # $ perl ls.pl -x 128 # 128
はできるけれど、
# ls.pl use Getopt::Std; getopt('x', \%opts); print $opts{x}, "\n"; # -------------------- # $ perl ls.pl -x 128 /var/www/cgi-bin/ # 128
でpathである部分の「/var/www/cgi-bin」の取り方が分からなかったが、
前述の引用より、getopt()が終わった後にまだ@ARGVに残っているわけだ。
# ls.pl use Getopt::Std; getopt('x', \%opts); print $opts{x}, "\n"; print "@ARGV", "\n"; # -------------------- # $ perl ls.pl -x 128 /var/www/cgi-bin/ # 128 # /var/www/cgi-bin/
うん、ばっちり。
これを使えばコマンドラインスイッチが完璧に処理できるな。
次はこれでlsをもっときっちり再現してみよう。