Perl中Getopt::Long的笔记

前些日子写的一个Perl程序需要传入参数到程序中,其中有个file参数可能需要多个值,但是无奈一直没找到怎么写,后来Google了N久之后,找到了一些可能的用法。

Code

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.010;

use Getopt::Long;

my @all_file = ();
my%flags;
#用来保存接收到的参数

GetOptions(
        'file|f=s{,}'=>@all_file,
        'flags=s'    => %flags

        #用'|'来给参数一个别名,即在使用时既可以用'-f filename',也可以用'-file filename'。

        #'='表示此参数一定要有参数值, 若改用':'代替表示参数不一定要有参数值

        #'s'是代表String,表示接收到的参数以字符串的形式保存。若为'i'表传递整数参数, 若为'f'表传递浮点数

        #'{,}'表示紧跟着此参数可能出现的个数不定,如'-f file1 file2 file3'。若无此设置,则需要'-f file1 -f file2 -f file3'

        #如果相关联的变量是个散列, 那么就要求一个键=值(key=value)对, 并被插入到散列里。如'-flags file1=/filepath1 file2=/filepath2'。若无'{,}',则需要'-flags file1=/filepath1 -flags file2=/filepath2 -flags file3=/filepath3'

        #用''来引用变量
);

在执行了./getopt.pl -f 1.txt 2.txt -flags open=yes -flags delete=no之后,

### @all_file: [
###         '1.txt',
###         '2.txt'
### ]
### %flags: {
###         delete => 'no',
###         open => 'yes'
### }

(这里为了方便调试,用了use Smart::Comments,该扩展可从CPAN获取)

这篇文章中使用的源码可从我的Github中获取。

Leave a Reply

Your email address will not be published. Required fields are marked *

eight − one =