Perlã§ã³ãã³ãã©ã¤ã³ãªãã·ã§ã³ãparseãããã¨æãã¨çµè¾¼ã¿ã¢ã¸ã¥ã¼ã«ã¨ãã¦ã¯ Getopt::Std 㨠Getopt::Long ããããããlong style option *1 ã¤ã¾ã --option-name ã®ãããªãªãã·ã§ã³ãè§£éãã¦ãããã®ã¯ Getopt::Long ã ãã ããªã®ã§æ®éã¯ãã¡ãã使ããã
ãã ã
絶対ã«ããã©ã«ããã¤ã¾ã以ä¸ã®ããã«ãã¦ä½¿ã£ã¦ã¯ãããªãã
use Getopt::Long; my (@primary, @secondary, $silent); GetOptions( "server-primary|p=s" => \@primary, "server-secondary|s=s" => \@secondary, "silent|S" => \$silent );
ãããã¡ï¼ 絶対ãã¡ï¼ æ»ã¬ï¼
æåã«çµè«ãæ¸ã
å¿ ã以ä¸ã®ããã«ãã¦ä½¿ãã¾ããããããããã¶ãæãå®å ¨ã§ãå¤ãã®äººã«ã¨ã£ã¦ç´æçã«æ£ããã¯ãã
use Getopt::Long qw(:config posix_default no_ignore_case gnu_compat);
以ä¸ç´°ãã説æã
Getopt::Longã®åºæ¬çãªæ©è½
ãã£ããè³¢ãã以ä¸ã®ãããªãã¨ããã£ã¦ãããã
- 弿°ãã¨ããªãã·ã§ã³ãæå®ã§ããã¾ããã®å¼æ°ãæ°å¤ãæååããæå®ã§ãã
- "optname=s" ã§æååãã¨ããªãã·ã§ã³ã"optname=i" ã§æ°å¤ãã¨ããªãã·ã§ã³
- ãããã£ãæå®ããªã "optname" ã ãã ã¨ãæå®ãããã°çã«ãªã
- ãªãã·ã§ã³ãè¤æ°åè¨è¿°ãããã¨ãã«ãªã¹ããåãåãã
- 以ä¸ã®ãããªã³ãã³ãã©ã¤ã³ãªãã·ã§ã³æå®ããããã¨ã ("hoge", "pos", "moge") ãåãåãã
--optname hoge --optname pos --optname moge
-
- ãã ã "optname=s@" ã¨æå®ããã¦ãããã¨
- ããã㯠"optname=s" ãåãåã夿°ã*2 arrayref ã«ãªã£ã¦ãããã¨
- long option ã«å¯¾ã㦠alias ãæå®ã§ãã
- "optname|x" ã¨ãã¦ããã° "--optname" ãæå®ããå ´å㨠"-x" ãæå®ããå ´åã«ããããåããã®ã¨ãã¦æ±ã
- ãã®ã¨ãæ£å¼å㯠optname ãªã®ã§ãçµæã®åãåããä¸å¾ããã·ã¥ã§åããå ´å*3㯠-x ãæå®ãã¦ã optname ãã¼ã«å¤ãå ¥ã
- "optname|x" ã¨ãã¦ããã° "--optname" ãæå®ããå ´å㨠"-x" ãæå®ããå ´åã«ããããåããã®ã¨ãã¦æ±ã
ãã ããããã©ã«ãã§ã¯æ¥µãã¦ä½è¨ãªãç¯ä»ãªãã¨ã«ã以ä¸ã®ãããªãã¨ããã¦ããããé ã«ç´¹ä»ãã¦ãããã
auto_abbrev
å ¥åãä¸éå端ãªãªãã·ã§ã³ããã£ãå ´åãããã long option ã®å é ã«ããããããªããããã long option ãæå®ãããã®ã¨ãã¦æ±ããããã©ã«ãã§æå¹ã
ã©ããããã¨ãã¨ããã¨ã以ä¸ã®ãããªæå®ããããã¨ãã«
GetOptions(\%opts, qw( server ) );
ãã®ã¹ã¯ãªããã«å¯¾ãã¦ã以ä¸ã®ãµãã¤ã®å ¥åãå ¨ãåãæå³ãæã¤ã®ã ã
$ command --server $ command --serve
ããã¼ãã¸ã§ã¼ãèãããã¼ãééã£ã¦ããªãã·ã§ã³ãªãã ããã¨ã©ã¼ã«ãã¦ãâ¦â¦ã
permute
ãªãã¦è¨ã£ããããã®ãããããªãã»ã©ã¯ã½ãªãªãã·ã§ã³ããé åºãå¤ããããå¤ãããªããããã©ã«ãã§æå¹ã
permuteãæå¹ã ã¨ã以ä¸ã®ãµãã¤ã®ãªãã·ã§ã³æå®ãå ¨ãåããã®ã¨ãã¦è§£éãããã
$ command --foo arg1 --bar arg2 arg3 $ command --foo --bar arg1 arg2 arg3
æ¬å½ã«åå¼ãã¦ãã ããã
ãããæ´ã«ã©ã®ããã«è§£éãããã®ã㯠require_order ã®è¨å®ã«ãå¾ããã¨ã«ãªãããã¸ãé¢åãªã®ã ããè¦ããªãã¦ãããpermuteããªãã«ãã¦ãã¾ãã®ãæ£ããã
ignore_case
ãªãã·ã§ã³åã« short option (1æåã®ãªãã·ã§ã³)ã使ç¨ããã¨ãããã®ãªãã·ã§ã³ã«ã¤ãã¦å¤§æåå°æåã®åºå¥ãç¡è¦ãããããã©ã«ãã§æå¹ã
ãªãã§ãªãã ãããªãã§ç¡è¦ããã ãããµããããªãå§å©å£²ã£ã¦ãã®ããããããªãã ãã
ããããæå¹ã ã¨ã以ä¸ã®ããã«æå®ããã³ã¼ãã§
GetOptions(\%opts, qw( key-primary|p=s key-secondary|s=s silent|S ));
ããã«å¯¾ãã¦ä»¥ä¸ã®ããã«å®è¡ããã¨ãããã
$ command -p hoge -s moge
ãã®ã¨ãã»ãããããã®ã¯ 'key-primary'(å¤ã« hoge ãå ¥ã) 㨠'silent'(ãã©ã°ãªã®ã§çå¤ã«ãªã) ã ãã ï¼ key-secondary ã¯ç¡è¦ï¼ ãã£ãï¼
æ¬å½ã«æ»ãã ã»ããããã
坾妿³
æããã°ãã®ãä¸è¨ã®ãªãã·ã§ã³ã ããä»ã«ãæããã®ãããã®ã§æ°ã«ãªã人ã¯マニュアルãçèªãªãããããã
ã§ãã©ããããã¨ãã㨠posix_default ã¨ããè¨å®é
ç®ãããããããæå¹ã«ãããã¨ã§ auto_abbrev ã¨ã permute ã¨ãã£ãã¤ã¯ã¶ãªè¨å®ãè»ä¸¦ã¿ãªãã¨ãªããæã
ã®ç¥ã£ã¦ããæ¸
ãæ£ããä¸çãè¿ä»ãã®ã§ãæ®éã®äººã¯è¿·ããã«æå¹ã«ããã¨ããã
ã¾ã ignore_case ã ã㯠posix_default ãæå®ãã¦ããªãã«ãªããªãã®ã§ãããã¯åå¥ã«ãªãã«ããå¿
è¦ãããã
å ã㦠--option=value ã¨ãã£ããããã¯ããã§é¦´æã¿ãããå½¢å¼ã®æå®ãããã©ã«ãã§ã¯ç¡å¹ã®ããããããæå¹ã«ããããã®æå®ã¯å
¥ãã¦ãè¯ãããã¨ãããã¨ã§ gnu_compat ãæå®ããã
ã¨ãããã¨ã§åé ã«ãã£ã以ä¸ã®æå®ãè¡ãã¾ããããã¨ãããã¨ã«ãªãããã§ããï¼
use Getopt::Long qw(:config posix_default no_ignore_case gnu_compat);
ããæ¬å½ã«ããæå®ããã¹ãï¼ çµ¶å¯¾ã«å¾æããªãï¼
ãªãããããã®ç¥èããã¡ãã¨æ´çããã«ããã @riywoãã @kazuhoãã @hirose31ãã ã®ã䏿¹ã«ããããæãã¦ããã ãã¾ããï¼ ãããã¨ããããã¨ãï¼
ãã¾ã: bundling
bundling ã¨ããè¨å®é ç®ãããããããæå¹ã«ããã¨1æåãªãã·ã§ã³ã䏿°ã«æå®ãã以ä¸ã®ãããªèµ·åæ¹æ³ãå¯è½ã«ãªãã(ããã©ã«ãã§ã¯ç¡å¹)
$ command -aux # ããã§ -a -u -x ãæå®ãããã¨ã«ãªã
便å©ã ãã© 'aux' ã¨ãã long option ãå®ç¾©ããã¦ãããã©ããªãã®ãã¨ããåé¡ããã£ã¦ bundling_override ã¨ããã¨ããã«æ¸ãã¦ããããèªãã¨è¯ãã§ããã