Вот почему так важно включить прагмы strict
и warnings
. Строка "@ $ date1" не означает, что вы думаете. Он пытается разыменовать $data1
как массив. Поскольку strict
не включен, он обрабатывает содержимое $date1
как символическую ссылку. Если бы вы включили strict
, вы бы увидели сообщение об ошибке вроде:
Can't use string ("2010-08-30") as an ARRAY ref while "strict refs" in use at script.pl line 10.
Вы, вероятно, должны сказать это вместо:
system "p4 interchanges -t $branch1\@$date1,\@$date2 $branch2 > changes.txt";
if ($?) {
die "saw exit code: ", $? >> 8;
}
У вас также может быть проблема, если вы ожидаете, что $branch1
, $date1
и т. Д. Будут переменными оболочки вместо переменных Perl. В этом случае вы должны сказать:
system "p4 interchanges -t $ENV{branch1}\@$ENV{date1},\@$ENV{date2} $ENV{branch2} > changes.txt";
if ($?) {
die "saw exit code: ", $? >> 8;
}