我写了一个小代码来设置系统的日期/时间。我花了一些时间在标量$time
中,然后将其拆分并存储在数组@timeIs
中。然后使用$hour
和$min
从数组中提取小时和分钟。我认为这是一个糟糕的方法,它耗费时间和长度(代码长度)。我需要一些建议来减少步骤的数量,并在一行中进行。有什么建议吗?
#!/usr/bin/perl
use warnings;
use strict;
print "Enter day";
chomp (my $day = <STDIN>);
print "Enter month";
chomp (my $month = <STDIN>);
print "Enter year";
chomp (my $year = <STDIN>);
print "Enter time in hour:minute format";
chomp (my $time = <STDIN>);
my @timeIs = split(/:/,$time);
my $hour = $timeIs[0];
my $min = $timeIs[1];
my $date = `date $month$day$hour$min$year`;
print $date;
答案 0 :(得分:1)
我的建议是保持原样。你有大约13行代码。那不是很多。通过压缩,你只会降低那些需要在6个月后理解这段代码的人(包括你)的可读性。调试密集的代码也更难。程序员时间比编译时间,解释时间和运行时间更昂贵。所以要高兴它的工作,然后继续你的下一个任务。
答案 1 :(得分:1)
您不需要@timeIs临时变量:
my($hour, $min) = split /:/, $time;
答案 2 :(得分:1)
我在这里看到了很多重复。为什么不用子程序制作代码DRY-er? :
use strict;
use warnings;
sub expect {
print +shift, "\n";
chomp( my $response = <STDIN> );
return $response;
}
my $day = expect 'Enter day';
my $month = expect 'Enter month';
my $year = expect 'Enter year';
my ( $hour, $min ) = split /:/, expect 'Enter time in HH:MM format';
print `date $month$day$hour$min$year`;
答案 3 :(得分:0)
几乎相当于:
#!/usr/bin/perl
use warnings;
use strict;
my $time_elements = [ qw(day month year hour minute) ];
my $time_ref;
my $ux_command = 'date ';
foreach my $elem ( @{ $time_elements } ){
print "Enter $elem\n";
chomp ( $time_ref->{$elem} = <STDIN> );
$ux_command .= $time_ref->{$elem};
};
my $date = `$ux_command`;
print $date;
答案 4 :(得分:0)
一种方法,同时询问所有信息:
perl -e '
print qq[Enter date (format: dd-mm-yyyy hh:mm): ];
@d = split /[-:\s]+/, <STDIN>;
$" = qq[];
$date = `date @d[1,0,3,4,2]`;
print $date
'