为什么elsif语句不能与@ARGV变量一起使用?

时间:2014-07-17 21:23:55

标签: perl if-statement

我正在处理时间,需要将某些值输入到基于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);

3 个答案:

答案 0 :(得分:6)

使用==测试数字相等性,而不是赋值运算符=

此外,我怀疑提醒您始终在每个Perl脚本的顶部包含use strictuse 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;