在MacOS 10.7.2上的Perl v5.12.3中运行以下命令:
#!/usr/local/bin/perl
use strict;
use warnings;
use DBI;
my $db = DBI->connect("dbi:SQLite:testdrive.db") or die "Cannot connect: $DBI::errstr";
my @times = ("13:00","14:30","16:00","17:30","19:00","20:30","22:00");
my $counter = 1;
for (my $d = 1; $d < 12; $d++) {
for (my $t = 0; $t < 7; $t++) {
#weekend days have 7 slots, weekdays have only 4 (barring second friday)
if (($d+4) % 7 < 2 || ($t > 3)) {
$db->do("INSERT INTO tbl_timeslot VALUES ($counter, '$times[$t]', $d);");
$counter++;
#add 4:00 slot for second Friday
} elsif (($d = 9) && ($t = 3)) {
$db->do("INSERT INTO tbl_timeslot VALUES ($counter, '$times[$t]', $d);");
$counter++;
}
}
}
$db->disconnect;
我得到一个“Found = in conditional,should is == at addtimes.pl line 16”警告,但是该行没有等号。此外,循环似乎从$d == 9
开始。我错过了什么?
第16行:
if (($d+4) % 7 < 2 || ($t > 3)) {
感谢。
答案 0 :(得分:18)
问题出在您的elsif
} elsif (($d = 9) && ($t = 3)) {
^-----------^--------- should be ==
因为if
语句在第16行开始,而elsif
是该语句的一部分,所以这是报告错误的地方。这是Perl编译器的一个不幸的限制。
在一个不相关的说明中,如果可以的话,避免使用C风格的循环要好得多:
for my $d ( 1 .. 11 ) {
...
for my $t ( 0 .. 6 ) {
...
}
}
不是更漂亮吗? :)
答案 1 :(得分:6)
} elsif (($d = 9) && ($t = 3)) {
此行会将9
分配给$d
,将3
分配给$t
。正如警告所说,你可能想要这个:
} elsif (($d == 9) && ($t == 3)) {