gpt4 book ai didi

linux - 在 Perl 脚本中使用未初始化的值

转载 作者:太空宇宙 更新时间:2023-11-04 05:40:30 26 4
gpt4 key购买 nike

我有以下程序用于检查 Unix 目录中的文件可用性。

my $numbera = "c://";
my $numberb = "test1.txt";
check_file_exist($numbera, $numberb);

sub check_file_exist {
my $download_filename;
my ($numbera,$numberb) = @_;
$download_filename = $numbera.$numberb;
print "*** $download_filename ****";
my $mtime = (stat $download_filename)[9];
my $filedatetime = scalar localtime $mtime;

if (-e $download_filename) {
print "Data File Exist which is created on $filedatetime";
}
unless (-e $download_filename) {
print "File not exists";
}
}

运行程序时出现以下错误:

*** data_file=HASH(0xa912f0)/home1/saravanan/ ****
Use of uninitialized value in localtime at /home1/saravanan/data_file.pl

最佳答案

首先,始终将这些放入您的程序中:

use strict;
use warnings;

当您使用strict时,您必须使用myour声明变量(提示:大约99.99%的时间您使用my)。

这些将捕获脚本中的各种错误:

此外,请使用缩进。它使您的脚本更易于阅读。在子例程内部输出也是不好的形式(除非这是子例程的目的。相反,让子例程返回(或不返回值),然后显示它。

您的问题是您在知道文件是否存在之前尝试stat 文件。您需要将 stat 放入 if 语句中,以检查文件是否存在。

除了上面所说的之外,我还做了一些更改:

  • 我使用 say 而不是 print。如果您使用print,则必须输入终止\nsay 命令会为您完成此操作。
  • 一旦获得子例程,我就会提取参数(并使用比 $numbera$numberb 更好的变量名称。
  • 我使用 if/then/else 而不是先执行 if,然后执行 unless 进行相同的测试。在大多数情况下我不再使用unless。说if (not ...) 更清楚。
  • 子例程要么返回日期戳,要么不返回任何内容。我使用 if 语句检查子例程的返回值。

这是您的程序的一些更新:

use warnings;
use strict;
use autodie;
use feature qw(say);
use Data::Dumper;

my $numbera = "/Users/david";
my $numberb = ".profile";

if ( my $timestamp = check_file_exist( $numbera, $numberb ) ) {
say "The file was downloaded at $timestamp";
}
else {
say "The file does not exist";
}

sub check_file_exist {
my $directory = shift;
my $file_name = shift;

my $download_filename = "$directory/$file_name";

my @stat = stat($download_filename);
if (not @stat) {
return;
}
my $mtime = $stat[9];
return scalar localtime $mtime;
}

关于linux - 在 Perl 脚本中使用未初始化的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com