我正在处理时间,需要将某些值输入到基于UTC和本地标准时间差异的等式中。因此,对于洛杉矶来说,@ ARGV输入将是" 8"并且需要插入嵌套方程中的值是" 4"但脚本不会选择合适的值。相反,它只选择过程中的第一个值,尽管ARGV值不是5。我做错了什么?
$std_time = (@ARGV[0]);
if ($std_time = 5) {(std_time_pro = 7);}
elsif ($std_time = 6) {(std_time_pro = 6);}
elsif ($std_time = 7) {(std_time_pro = 5);}
elsif ($std_time = 8) {(std_time_pro = 4);}
elsif ($std_time = 9) {(std_time_pro = 3);}
elsif ($std_time = 10) {(std_time_pro = 2);}
$shft_number = (($std_time_pro * 3600) / 86400);
答案 0 :(得分:6)
使用==
测试数字相等性,而不是赋值运算符=
。
此外,我怀疑提醒您始终在每个Perl脚本的顶部包含use strict
和use warnings
。由于其中一些原因,请阅读:Why use strict and warnings?
最后,我建议建立一个散列来关联你的两个值,而不是if
语句列表:
use strict;
use warnings;
my ($std_time) = @ARGV;
my %std_time2pro = map {$_ => 12 - $_} (5..10);
my $std_time_pro = $std_time2pro{$std_time} // die "Invalid value of std_time: $std_time";
答案 1 :(得分:1)
您需要将=更改为==以测试相等性;
答案 2 :(得分:1)
您不仅需要将=
更改为==
,而且您将值分配给std_time_pro
而不是$std_time_pro
。
你需要在你编写的每个Perl程序的顶部总是有这两行来捕捉这些问题:
use warnings;
use strict;