调试 perl 脚本 - 变量插值

发布于 2024-12-18 10:27:29 字数 1338 浏览 0 评论 0原文

尝试调试这个脚本。我认为这可能是变量插值的问题?我不知道。 如果我传递这样的值,它可以使用选项:

perl test-file-exists.pl --file /proj/Output/20111126/_GOOD

我正在尝试删除传入 的选项>--file 因为我需要生成日期 动态地。

perl test-file-exists.pl

鉴于下面的代码更改(我注释掉了选项部分)。我正在尝试创建字符串(请参阅$chkfil)。我在 $dt4 中传递时遇到错误。不知何故,它没有将我正在创建的文件字符串传递到另一个模块中。

use strict;
use warnings;
use lib '/home/test/lib';
use ProxyCmd;
use Getopt::Long;

#
### Set up for Getopt
#
#my $chkfil;
#my $help; 

#usage() if ( @ARGV < 1 or                       
#          ! GetOptions('help|?' => \$help,
#                       'file=s' => \$chkfil)
#     or defined $help );

my $cmd = ProxyCmd->new( User=>"test_acct",
                    AuthToken=>"YToken",
                  loginServer=>"host.com");

# Get previous day
my $dt4 = qx {date --date='-1day' +'%Y%m%d'};

# Check file
my $chkfil = qq{/proj/Output/$dt4/_GOOD};

# Now test the fileExists function
print "Checking 'fileExists':\n";
my $feResults = $cmd->fileExists("$chkfil");

if ($feResults == 0) {
    print "File Exists!\n";
    } else {
      print "File Does Not Exist\n";
}

sub usage
{
  print "Unknown option: @_\n" if ( @_ );
  print "usage: program [--file /proj/Output/20111126/_GOOD] [--help|-?]\n";
  exit;
}

Try to debug this script. I think it maybe an issue of variable interpolation? I'm not sure.
It works using options if I pass the values like so:

perl test-file-exists.pl --file /proj/Output/20111126/_GOOD

I am trying to remove the option of passing in --file since I need to generate the date
dynamically.

perl test-file-exists.pl

Given the code changes below (I commented out the options piece). I am trying to create the string (see $chkfil). I am getting errors passing in $dt4. Somehow, its not passing in the file string that I am creating into this other module.

use strict;
use warnings;
use lib '/home/test/lib';
use ProxyCmd;
use Getopt::Long;

#
### Set up for Getopt
#
#my $chkfil;
#my $help; 

#usage() if ( @ARGV < 1 or                       
#          ! GetOptions('help|?' => \$help,
#                       'file=s' => \$chkfil)
#     or defined $help );

my $cmd = ProxyCmd->new( User=>"test_acct",
                    AuthToken=>"YToken",
                  loginServer=>"host.com");

# Get previous day
my $dt4 = qx {date --date='-1day' +'%Y%m%d'};

# Check file
my $chkfil = qq{/proj/Output/$dt4/_GOOD};

# Now test the fileExists function
print "Checking 'fileExists':\n";
my $feResults = $cmd->fileExists("$chkfil");

if ($feResults == 0) {
    print "File Exists!\n";
    } else {
      print "File Does Not Exist\n";
}

sub usage
{
  print "Unknown option: @_\n" if ( @_ );
  print "usage: program [--file /proj/Output/20111126/_GOOD] [--help|-?]\n";
  exit;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

简单爱 2024-12-25 10:27:29

当您使用反引号或 qx 时,您会得到尾随换行符,因此 chomp 将其关闭:

my $dt4 = qx {date --date='-1day' +'%Y%m%d'};
chomp $dt4;

您将获得一个合理的文件名。

您还可以使用 DateTime 和朋友来避免完全花钱。

When you use backticks or qx, you get the trailing newline included so chomp it off:

my $dt4 = qx {date --date='-1day' +'%Y%m%d'};
chomp $dt4;

and you'll get a sensible filename.

You could also use DateTime and friends to avoid shelling out entirely.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文