如何使用perl使用命令行参数从目录中获取文件?

时间:2017-02-16 12:13:41

标签: perl

我尝试使用文件夹名称(即专业版)和位置(即“/c/lol/ap/a/ds/crent/stup/pjects/DEMO/mfile.txt)获取文件并运行脚本(即perl readfile.pl)使用命令行参数。所以我自己尝试了下面的示例脚本。但我觉得我的脚本完全错误。任何人都可以帮助我正确的方法。

示例脚本:(perl readfile.pl)

use strict;
use warnings;
use Getopt::Long qw(GetOptions);
my $pro;
my $mfile;
my $odir;
GetOptions('pro' => \$pro) or die "Usage: $0 --pro\n";
GetOptions('mfile' =>\$mfile) or die "Usage:$0 --mfile\n";
GetOptions('odir' =>\$odir) or die "Usage:$0 --odir\n";
print $pro ? 'pro' : 'no pro';

错误:

Unknown option: mfile
Unknown option: odir
Usage: readfile.pl --pro

按如下方式运行命令行:

我应该创建脚本来运行命令行,如下所示。

perl readfile.pl -pro “pr1” -mfile “/c/lol/ap/a/ds/crent/stup/pjects/DEMO/mfile.txt” -odir “/home/html_files”

2 个答案:

答案 0 :(得分:1)

不确定您在此处尝试实现的目标,但您对GetOptions的使用是错误的。如果您调用它,则会尝试处理所有命令行选项,而不仅仅是一个。因此,在您对GetOption的第一次调用中未定义的所有内容最终会在最后触发or die ...部分并停止该程序,从而产生使用消息。请查看Python Networked Chat以获取一些有用的示例。

您还必须在命令行调用中为选项使用两个连字符才能使其正常工作...

答案 1 :(得分:1)

调用GetOptions('pro' => \$pro)-pro以外的所有选项视为无效,因此您必须在一次调用中处理所有可能的命令行选项

由于您的选项具有字符串值,因此您还需要将=s附加到选项名称

看起来像这样

use strict;
use warnings 'all';

use Getopt::Long 'GetOptions';

GetOptions(
    'pro=s'   => \my $pro,
    'mfile=s' => \my $mfile,
    'odir=s'  => \my $odir,
);

print $pro   ? "pro   = $pro\n"   : "no pro\n";
print $mfile ? "mfile = $mfile\n" : "no mfile\n";
print $odir  ? "odir  = $odir\n"  : "no odir\n";

输出

pro   = pr1
mfile = /c/lol/ap/a/ds/crent/stup/pjects/DEMO/mfile.txt
odir  = /home/html_files