読者です 読者をやめる 読者になる 読者になる

perlにおける "-" と "--"の扱い

問1

curl -L http://cpanmin.us | perl - Task::Amon2 -nv

がやっていることを正確に述べよ(10点)

んー、自信なし。

ということで、真面目に調べてみる。 こういう時はじぶんで試行錯誤してみるのが吉。

test.pl
#!/usr/bin/env perl                                                                                                                                                                          
use strict;                                                                                                                                                                                  
use warnings;                                                                                                                                                                                
use utf8;                                                                                                                                                                                    
                                                                                                                                                                                             
print "-----\n";                                                                                                                                                                             
print  join(qq| |, @ARGV);                                                                                                                                                                   
print "\n";

を用意しておく。

まず、素直に実行してみる。

$ cat test.pl | perl -MData::Dump
-----

Data::Dumpがperlのオプションとして扱われることが分かる。

次は"--"。

$ cat test.pl | perl -- -MData::Dump 
Can't open perl script "-MData::Dump": No such file or directory

-- 以降は ファイル名 として扱われてるのがわかる。

最後は"-"。

$ cat test.pl | perl - -MData::Dump 
-----
-MData::Dump

"-" 以降は 標準入力として読み込んだスクリプトの引数になってることがわかる。

追記(2014/4/19)

bashのオプションだというヒドい勘違いをしていたけど、よく考えたらperlコマンドの話でありました... コメントいただいて気づきました。

perldoc perlrun

http://perldoc.jp/docs/perl/5.18.1/perlrun.pod

標準入力から暗黙に渡される。 ファイル名を示す引数が無い場合にのみうまくいきます--STDIN から読み込む プログラムに引数を渡すには、プログラム名として明示的に "-" を 指定しなくてはなりません。