我的剧本:

#!/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 票数: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存在,并针对那些以及您可能想到的更多情况抛出适当的错误消息。

  ask by Kalaiyarasan translate from so

未解决问题?本站智能推荐:

5回复

如何使用Perl脚本将具有特定扩展名的文件从一个文件夹移动到另一个文件夹,然后重命名已移动的文件

我有2个文件夹DIR1 DIR2,我只需要将扩展​​名为“ .csv”的文件仅从dir1移动到dir2 并使用dir2中的时间戳重命名这些文件复制的文件 我开发的上述代码移动了扩展名为“ .csv”的文件以及文件名为“ abc_csv_uv.txt”的文件。我该如何解决此问题,然后
4回复

如何检查文件名是否包含目录信息?

我想检查文件名中是否包含任何目录信息,最好不使用依赖于系统的黑客程序,例如index($file_name,'/')!=-1 。 我知道File::Spec模块,但是似乎找不到找到使用该模块进行确定的方法。 也许另一个模块会更好。 以下是文件名的一些示例:
3回复

检查文本文件中是否存在多行

使用Perl我想检查以下突出显示的两行是否存在于文本文件中。 每行前都有一个制表符。 我正在使用以下if语句,但它不匹配 我究竟做错了什么 ? 编辑这是我写的程序: 关闭INFILE; 关闭OUTFILE; 输入文件中的记录示例 谢谢,格雷厄姆
4回复

如何在Perl中检查带有标题的CSV文件是否为空

我有一个包含内容的csv文件xyz.csv 我需要解析csv文件并检查它是否为空文件,即它没有提供的标头的值。 空文件xyz.csv仅包含标题(标题no可能会减少或增加),例如减少: 增加: 我如何在下面的代码中检查空文件并打印是否为空? 我已经开发了以下脚本
1回复

是否有CPAN模块列出美国邮政编码和州?

基本上,我正在寻找一个可以告诉我的模块: 给定状态下的所有邮政编码 给定的邮政编码是否处于给定状态 给定邮政编码所属的州 我宁愿这是独立的,所以我不会拉一大堆依赖。 我基本上是在问这个问题,因为我准备使用我在美国人口普查局网站上找到的这个文件生成一个模块,
1回复

无法通过XML :: Excel中的变量提供文件名

不知道是否还有其他方法,但是当我将文件名传递为: 它有效,但是如果我通过: 它没有任何通过变量传递文件名的特殊方法。
2回复

如何使用file:find查找重复的文件名?

我正在尝试编写一个程序,以使用Perl在多个驱动器中查找重复的文件名。 这是我的脚本,但是它提供了错误的信息。
2回复

如何检查是否所有Perl模块都已导入?

假设我有一个Perl模块: 此模块中存在错误,因为它忘记use Foo::Buzz 。 我的单元测试并不总能捕获此错误,例如,如果Foo::Buzz的测试运行较早并且在运行add()之前导入Foo::Buzz 。 如果我在生产代码中使用此模块,它将失败并显示未导入Foo::Buzz的
4回复

使用perl检查嵌套目录结构是否为空

我的要求是检查嵌套目录结构是否具有任何二进制文件。 目录结构如下所示: 在任何时间点,级别1或级别2上都可以有更多目录,即级别1可以有更多目录,例如DIR-P, DIR-Q等,而级别1可以有DIR-X3 or DIR-Y4 2级。 我已经编写了一个示例代码,但是如果找到DIR
2回复

在perl中使用gunzip或解压缩文件,并在变量中捕获文件名

我有9001_20150921113547_00041.xml.gz ,我想将其压缩,也可以说将其解压缩为9001_20150921113547_00041.xml ...我在perl中有很多方法,我也使用了system() , qw , qx和backtick ,它只是解压缩文件并将文件存储在路径