检查文件是否有zip扩展名

时间:2014-04-20 02:26:54

标签: perl perl-module

我的剧本:

#!/usr/local/bin/perl
use POSIX qw(strftime);
use strict;
use warnings;
use Getopt::Long;

##input parameters

my ($artifact,$package_id);
GetOptions("artifact=s" =>\$artifact,
       "package_id=i" => \$package_id);
if($artifact =~ /\.zip$/i)
    {
    chdir("/apps/checkout/artifactory/xxkintana/$package_id");
    unzip  $artifact;
 }

运行:

./ script.pl 4370177 test-1.0.zip

错误:

在./script.pl第21行的模式匹配(m //)中使用未初始化的值。

请帮我找一下它的zip文件。输入文件,如test-1.0.zip

-Thnaks

1 个答案:

答案 0 :(得分:1)

您正在检查$artifact是否以.zip结尾,但在调用脚本时实际上并没有设置它。

./script.pl --package_id=4370177 --artifact=test-1.0.zip

我建议清理解析选项,以便实际进行错误检查。

#!/usr/local/bin/perl

use strict;
use warnings;

use POSIX qw(strftime);
use Getopt::Long;

##input parameters

GetOptions(
    "artifact=s"   => \my $artifact,
    "package_id=i" => \my $package_id,
) or usage();

usage("Unknown arguments: @ARGV\n") if @ARGV;
usage("--artifact is required\n") if ! $artifact;
usage("--package_id is required\n") if ! $package_id;

if ($artifact =~ /\.zip$/i) {
    chdir("/apps/checkout/artifactory/xxkintana/$package_id");
    unzip  $artifact;
}

sub usage {
    my $message = shift;
    die "${message}Usage: ./$0 --artifact=<artifact> --package_id=<id>\n";
}

最后,我可能会进行额外的错误检查,以确保您尝试chdir的目录存在,$artifact存在,并为那些以及您的更多案例抛出相应的错误消息可以想到。