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

Atm*_*Sci 0 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);
Run Code Online (Sandbox Code Playgroud)

Mil*_*ler 6

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

此外,我怀疑提醒始终包含use strictuse warnings每个Perl脚本的顶部.出于其中一些原因,请阅读:为什么要使用严格和警告?

最后,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";
Run Code Online (Sandbox Code Playgroud)